begin process at 2012 05 29 04:56:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Fonction membre vers pointer non typé


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fonction membre vers pointer non typé

lundi 27 août 2007 à 01:06:47 | Fonction membre vers pointer non typé

foxz


Est-il possible de convertir une fonction membre (d'une class) vers un pointer non typé(void*)
class A{
 int foo(int,int){};
void init(){
  void *t;
  A *x;
  x=this;
  int(A::*z)(int,int);
  t=&A::foo;
  z=t;
  (x->*z)(2,5);
};
}

j'ai une bonne raison de passer par un pointer non typé.
(j'aurai pu faire z=&A::foo mais n est pas ce que je cherche à faire)


FoxZ...
lundi 27 août 2007 à 17:43:24 | Re : Fonction membre vers pointer non typé

aardman

Membre Club
Salut,
A quoi ca peut bien te servir tout ce bricolage ?
lundi 27 août 2007 à 22:04:31 | Re : Fonction membre vers pointer non typé

foxz

mon but est de pouvoir chainer des methodes virtual sur des class multi-instances.

class A{
    virtual int foo(int){};
};

class B:A{
    int foo(int){};
}

class C:A{
    int foo(int){};
};

class D:B,C{};

...
D r;
r.foo(5); // la le compilo plante.
...

maintenant, je voudrais que D::foo() appel C::foo() qui appel lui meme B::foo() etc.
ET CEUX SELON L ORDRE DE LA DECLARATION.

FoxZ...
mardi 28 août 2007 à 21:04:37 | Re : Fonction membre vers pointer non typé

foxz

#include <cstdlib>
#include <iostream>

using namespace std;
#define vp virtual public

class SomeClass;

template <class T>
class SC{
    public:
        SomeClass*c;
        T f;
};

#define dcvl(r,v,p) typedef r(SomeClass::*td##v)p;typedef SC<td##v> ih##v;ih##v v;
#define dinh(c,v) c::ih##v ih##v;
#define vpp(v) ih##v=v;
#define ovr(cl,v) v.c=(SomeClass*)(this);v.f=(cl::td##v)
#define inh(v) (ih##v.c->*ih##v.f)
#define vcc(v) (v.c->*v.f)

class A{
    protected:
        dcvl(int,r,(int)); // declare int(SomeClass::*r)(int) (pointer de function membre)
    public:
        virtual int cascad(int x){
            vcc(r)(x);    // appele *r (un pointer de function s'appel comme suit class*->*pointer)
        };
};

class B:vp A{
    private:
        int foo(int x){
            std::cout << "B\n";       
        };
    public:
        B(){
            ovr(A,r)(&B::foo); // A::*r pointera sur B::foo
        };
};

class C:vp A{
    private:
        dinh(A,r);                // declare que A::*r aura un heritier
        int foo(int x){
            std::cout << "C\n";
            inh(r)(x);            // appele l'heriter
        };
    public:
        C(){
            vpp(r);                // sauvegarde l'heritier (cf inh plus haut)
            ovr(A,r)(&C::foo);    // A::*r pointera sur C::foo
        };
};


class e:vp B,vp C{};

int main(int argc, char *argv[])
{
    e z;
    z.cascad(3);
    system("PAUSE");
    return EXIT_SUCCESS;
}

un truc comme ca quoi...

ca donne
C
B

FoxZ...
mardi 28 août 2007 à 21:39:14 | Re : Fonction membre vers pointer non typé

aardman

Membre Club
Salut,
Dans ton exemple il n'y a pas de D::foo(), et c'est normal qu'il plante a l'appel de foo car il y a une ambiguité entre B::foo et C::foo.
Pour l'appel en cascade des autres methodes foo, je ne pense pas que ca soit possible, c'est a toi de le faire manuellement.



Cette discussion est classée dans : fonction, int, membre, typé, pointer


Répondre à ce message

Sujets en rapport avec ce message

adresse d'une fonction membre d'une classe [ par gagah1 ] Salut à tous!Je voudrais avoir l'adresse mémoire d'une fonction membre d'une classe, alors que l'ISO C++ l'interdire l'accès.Je m'explique:J'ai une c pointeur de fonction membre [ par maximus4 ] bonjour a tous,je voudrai savoir comment on passe en paramètre d'une fonction membre une autre fonction membre d'une autre class déjà instanciéeex:cla Pb Hook.... [ par Mr_Coinche ] Bonjour,J'ai crée une dll très simple appelée "DllMaths.dll", qui contient deux fonctions, "carre" et "cube", je vous laisse deviner ce que ces foncti Allocation dynamique de mémoire d'un tableau dans une fonction [ par DJfewos971 ] Bonjour a tous,mon problème est de pouvoir alloué la mémoire dynamiquement d'un tableau dans une fonction.Voici mon problème niveau Code:#include #inc [WinAPI] fonctions graphiques [ par riked ] Bonjour (ou bonsoir), Je suis nouveau sur cppfrance et je vient vous exposer mon problème. Je fait actuellement un programme qui à pour but d'affich Erreur dans l'appelle d'une fonction [ par cheval22222 ] Bonjour, je suis débutant en programmation et j'ai un problème avec mes petits programmes où je dois faire appel à une fonction quelquonque. Voici le Probleme passage tab** de fonctions a fonction. [ par Nitrakz ] Bonjour tous le monde ! Comme l'explique le titre j'ai un petit soucis pour passer un tableaux a 2 dimensions tab[i][j] d'une fonction a une autre. problème de typedef [ par Larwin ] bonjour tout le monde. Nouveau de le monde du c/c++, j'avoue que je galère quelque peu et je me retourne vers la communauté des développeurs pour trou appeler le int main() c++ [ par charleslemagicien ] bonjour à tous, Je suis dans un fichier connexe data.cpp et une fois ma fonction terminé je voudrais appeler le int main() du fichier main.cpp l'équi Exercice sur Pointeurs, classes, héritage... [ par snoozriton ] Bonjour à tous, étant en train d'étudier le C++, j'ai quelques soucis avec un exercice. C'est un classique dont je vous donne l'énoncé : [b]1. Défini


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales