C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Pointeur de fonction en paramètre de fonction

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Michael
Guest





PostPosted: Thu Sep 01, 2005 4:38 pm    Post subject: Pointeur de fonction en paramètre de fonction Reply with quote



Bonjour à tous,

soient les classes suivantes:

class A
{
public:
void fooA();
void toto();
}


namespace
{
typedef void (*fonction)();
};

class B
{
public:
void fooB(fonction fn);
}

void B::fooB()
{
(*fn)();
}

void A::fooA()
{
B b;
b.fooB(toto);
}

C'est au niveau du passage de paramètre dans A::fooA() que ça coince...

Si je laisse comme ça, il m'indique l'erreur suivante:

Impossible de trouver une correspondance pour 'B::fooB(void)'

Si je mets b.fooB(&toto):

Impossible de trouver une correspondance pour 'B::fooB(void (* (_closure
)())())'


J'ai vu un exemple comme ça dans 'Modern C++ Design' d'Alexandrescu, mais
lui passe un pointeur sur une fonction qui n'est pas dans une classe...

Quelle est la bonne syntaxe?

Merci d'avance
Back to top
Horst Kraemer
Guest





PostPosted: Fri Sep 02, 2005 8:54 am    Post subject: Re: Pointeur de fonction en paramètre de fonction Reply with quote



Michael <michael_delva.enlever (AT) hotmail (DOT) com> wrote:

Quote:
Bonjour à tous,

soient les classes suivantes:

class A
{
public:
void fooA();
void toto();
}


namespace
{
typedef void (*fonction)();
};

class B
{
public:
void fooB(fonction fn);
}

void B::fooB()
{
(*fn)();
}

void A::fooA()
{
B b;
b.fooB(toto);
}

C'est au niveau du passage de paramètre dans A::fooA() que ça coince...

Si je laisse comme ça, il m'indique l'erreur suivante:

Impossible de trouver une correspondance pour 'B::fooB(void)'

Si je mets b.fooB(&toto):

Impossible de trouver une correspondance pour 'B::fooB(void (* (_closure
)())())'


J'ai vu un exemple comme ça dans 'Modern C++ Design' d'Alexandrescu, mais
lui passe un pointeur sur une fonction qui n'est pas dans une classe...

Quelle est la bonne syntaxe?

Il n'y pas de bonne syntaxe. On ne peut pas passer une fonction membre
non statique d'une classe à un paramètre du type "pointeur de
fonction". L'appel

(*fn)();

n'aurait pas de sens, parce qu'on ne peut appeler une fonction membre
non statique de A que par un objet du type A ou d'un type dérivé de A.
Une technique qui fonctionne serait:

void fooB(A& a, void A::*fn)
{
(a.*fn)();
}


void A::fooA()
{
B b;
b.fooB(*this,&toto);
}

Le paramètre de fooB est "pointeur de fonction membre non statique de
A" et on passe un objet pour l'appel de la fonction membre à travers
le pointeur.

--
Horst


Back to top
Philippe Amarenco
Guest





PostPosted: Fri Sep 02, 2005 9:03 am    Post subject: Re: Pointeur de fonction en parametre de fonction Reply with quote



Michael <michael_delva.enlever (AT) hotmail (DOT) com> writes:

Quote:
Bonjour à tous,

soient les classes suivantes:

class A
{
public:
void fooA();
void toto();
}


namespace
{
typedef void (*fonction)();
};

class B
{
public:
void fooB(fonction fn);
}

void B::fooB()
{
(*fn)();
}

void A::fooA()
{
B b;
b.fooB(toto);
}

C'est au niveau du passage de paramètre dans A::fooA() que ça coince...

Si je laisse comme ça, il m'indique l'erreur suivante:

Impossible de trouver une correspondance pour 'B::fooB(void)'

Si je mets b.fooB(&toto):

Impossible de trouver une correspondance pour 'B::fooB(void (* (_closure
)())())'


J'ai vu un exemple comme ça dans 'Modern C++ Design' d'Alexandrescu, mais
lui passe un pointeur sur une fonction qui n'est pas dans une classe...


voire google 'pointer to member function'

class A
{
public:
void foo() {}
};

int main()
{
A x;
void (A::*func)() = &A::foo

(x.*func)();
}

--
Philippe Amarenco, aka Phix
epita 2007 - LSE - EpX
"if new true friend not protected for explicit private union, break
case and try using this." -- Nathan Myers, longest c++ sentence.

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.