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 :
et dans mon singleton :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
Singleton :
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) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void addEventListener(Main_controller*objet, std::string event_, void(*func_)(Main_controller *_this)){ func_(objet); }
Merci beaucoup de votre aide,
à bientôt
Partager