Methode prenant une methode en parametre ?
Le
chahnaz.ouzikene
Bonjour,
Evitons les blahblah : J'ai besion de créer une classe modélisant une
application OpenGL. Pour ce, j'ai besoin d'écrire une méthode qui prends une
méthode en paramètre, j'ai besoin de votre aide pour y parvenir car je ne
sais pas quelle syntaxe utiliser.
<code>
class ParameterNeeded{
public :
ParamaterNeede();
setNeededMethode(void *(*) () ); // comment declare un parametre de type
pointeur vers fonction ??
private :
void * (*) privateMethode; // pointeur vers une methode ??
};
ParameterNeeded::ParametreNeeded(){
cout << "Constructeur de la classe qui demande un parametre de type
methode";
}
void ParameterNeeded::setNeededMethode(void * f()){ // est-ce correct ?
privateMethode=f;
cout << "J'ai trouve la fonction dont j'ai besoin !";
}
class ParameterProvider {
ParameterProvider();
ProvidedMethode();
};
/* Implementation de la classe ParameterProvider*/
/* Implementation de la classe ParameterProvider*/
main(){
ParameterNeeded Pn = new ParameterNeeded();
Pn->setNeededMethode(&ParametreProvider::ProvidedMethode) // adresse d'une
fonction/methode ?
/* Reste du code */
/* Reste du code */
}
</code>
Evitons les blahblah : J'ai besion de créer une classe modélisant une
application OpenGL. Pour ce, j'ai besoin d'écrire une méthode qui prends une
méthode en paramètre, j'ai besoin de votre aide pour y parvenir car je ne
sais pas quelle syntaxe utiliser.
<code>
class ParameterNeeded{
public :
ParamaterNeede();
setNeededMethode(void *(*) () ); // comment declare un parametre de type
pointeur vers fonction ??
private :
void * (*) privateMethode; // pointeur vers une methode ??
};
ParameterNeeded::ParametreNeeded(){
cout << "Constructeur de la classe qui demande un parametre de type
methode";
}
void ParameterNeeded::setNeededMethode(void * f()){ // est-ce correct ?
privateMethode=f;
cout << "J'ai trouve la fonction dont j'ai besoin !";
}
class ParameterProvider {
ParameterProvider();
ProvidedMethode();
};
/* Implementation de la classe ParameterProvider*/
/* Implementation de la classe ParameterProvider*/
main(){
ParameterNeeded Pn = new ParameterNeeded();
Pn->setNeededMethode(&ParametreProvider::ProvidedMethode) // adresse d'une
fonction/methode ?
/* Reste du code */
/* Reste du code */
}
</code>

Poser une question


Apparemment tu veux aussi pouvoir donner en paramètre des fonctions
membres. Tu devrais regarder du côté des foncteurs. Par exemple :
http://www.boost.org/libs/bind/mem_fn.html
http://www.boost.org/libs/bind/bind.html
A+
--
Christophe de Vienne
renvoie 'void*' et qui ne prend pas de paramètres :
void* (*pfunc)();
...
class toto { public: static void* titi() { return 0; } };
pfunc = &toto::titi;
void* result = pfunc(); // Appel de la fonction pointée
Pointeur sur une méthode ordinaire de la classe "toto"
qui renvoie 'void*' et qui ne prend pas de paramètres :
class toto;
void* (toto::*pmemfunc)();
...
class toto { public: void* titi() { return 0; } };
pmemfunc = &toto::titi;
...
// Appel de la fonction pointée
toto t;
void* result = (t.*pmemfunc)();
ou
toto* pt = new toto;
void* result = (pt->*pmemfunc)();
Exemple d'une fonction qui prend un int,
un pointeur sur une telle méthode et
un double en paramètre :
void foo(int i, void* (toto::*pmemfunc)(), double d) { ... }
On gagne en lisibilité en utilisant un typedef :
typedef void* (toto::*ptr_toto_memfunc)();
void foo(int i, ptr_toto_memfunc pmemfunc, double d) { ... }
Falk
Encore merci.
"Falk Tannhäuser" news: cmg5eg$kfi$
Pointeur sur une méthode statique (ou une fonction libre) qui
renvoie 'void*' et qui ne prend pas de paramètres :
void* (*pfunc)();
...
class toto { public: static void* titi() { return 0; } };
pfunc = &toto::titi;
void* result = pfunc(); // Appel de la fonction pointée
Pointeur sur une méthode ordinaire de la classe "toto"
qui renvoie 'void*' et qui ne prend pas de paramètres :
class toto;
void* (toto::*pmemfunc)();
...
class toto { public: void* titi() { return 0; } };
pmemfunc = &toto::titi;
...
// Appel de la fonction pointée
toto t;
void* result = (t.*pmemfunc)();
ou
toto* pt = new toto;
void* result = (pt->*pmemfunc)();
Exemple d'une fonction qui prend un int,
un pointeur sur une telle méthode et
un double en paramètre :
void foo(int i, void* (toto::*pmemfunc)(), double d) { ... }
On gagne en lisibilité en utilisant un typedef :
typedef void* (toto::*ptr_toto_memfunc)();
void foo(int i, ptr_toto_memfunc pmemfunc, double d) { ... }
Falk