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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.