Utiliser une méthode d'une classe quelconque comme fonction de callback
Bonjour,
Le net est tellement fourni en documentation et exemples sur le sujet que je n'arrive pas à trouver solution à mon problème. Ou alors il faudrait que je passe une semaine à me former sur le sujet des pointeurs de fonction, des fonctions lambda, peut-être des templates, ce qui me serait surement très bénéfique, mais je manque de temps.
J'aimerai pouvoir dire à un objet d'une classe A d'appeler une méthode d'une autre classe quelconque.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class A {
void setFunctionToCall( /* paramètres */ ){
// La fonction passée en paramètre est une méthode non statique d'une classe quelconque
};
void f(){
// Appeler la fonction définie par setFunctionToCall
};
};
class B {
void g(){
cout << "hourra !" << endl;
}
};
class C {
string message;
C() : message("youpi !") {}
void h(){
cout << message << endl;
}
};
A a;
B b;
a.setFunctionToCall( b, B::g ); // ou quelque chose du genre.
C c;
a.setFunctionToCall( c, C::h ); // ou quelque chose du genre. |
J'ai trouvé beaucoup d'exemples pour implémenter la chose pour une classe unique (seulement B, ou seulement C, mais pas les 2 à la fois). Je pourrais aussi utiliser un template pour la classe A qui permettrait d'utiliser B ou C pour des instances différentes, comme
Mais je souhaite qu'une même instance de A puisse appeler au choix une méthode de n'importe quelle classe, et en changer en cours d'exécution, comme dans le code d'exemple donné.
Je n'arrive même pas à savoir si c'est possible en C++ !
Merci beaucoup.
P.S : J'ai besoin de ceci pour une application construite avec openFrameworks qui intègre la librairie POCO. Peut-être POCO permet-elle de faire ceci. Je préfèrerais apprendre à le faire sans POCO, en utilisant les nouveautés de C++11 si besoin.