Passage de fonction en argument à une autre classe
Bonjour,
je débute en C++ et je suis fasse à un problème depuis hier soir et je n'arrive pas à trouver une solution "propre".
Alors j'ai un singleton EventMovement, et une classe Main_controller.
Depuis Main, je cherche à faire quelque chose comme :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Main_controller::Main_controller(void){
EventMovement *eventMovement;
eventMovement = EventMovement::getInstance ();
//Ce que je cherche à faire :
eventMovement->addEventListener("haut_bas", maFonction);
}
void Main_controller::maFonction(void){
autreFonctionDeMain();
} |
et dans mon singleton :
Code:
1 2 3 4
|
void addEventListener(std::string event_, void(*func_)(void)){
func_();
} |
Mais évidemment ça ne marche pas... J'avais espéré qu'en passant la fonction par référence, ça marcherai tout seul ;-) Mais comme j'ai pas encore tout compris aux références, adresses,... :(
Finalement j'ai trouvé une solution, mais qui est un peu... crade :
Main_controller :
Code:
1 2 3 4 5 6 7 8 9 10
| Main_controller::Main_controller(void){
EventMovement *eventMovement;
eventMovement = EventMovement::getInstance ();
eventMovement->addEventListener(this, "haut_bas", Main_controller::maFonction);
}
static void Main_controller::maFonction(Main_controller *_this){
_this->autreMethodeDeMain();
} |
par contre du côté du singleton, le problème est que je dois connaitre le type des arguments, et du coup importer le Main_controller.h. Il faudra alors que je crée autant d'addEventListener que de classe qui l'utiliseront... Ce n'est pas très pratique :
Singleton :
Code:
1 2 3
| void addEventListener(Main_controller*objet, std::string event_, void(*func_)(Main_controller *_this)){
func_(objet);
} |
A votre avis, comment pourrais-je faire ? N'y a-t'il pas moyen de faire plus simple ? ou peut-on passer un argument dont le type est inconnu (ce serait déjà pas mal) ?
Merci beaucoup de votre aide,
à bientôt