cs_foxz
Messages postés101Date d'inscriptionmercredi 8 octobre 2003StatutMembreDernière intervention25 février 2009
-
27 août 2007 à 01:06
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
28 août 2007 à 21:39
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)
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;
}