Bonjour,
Je travail sur un interface utilisateur très simple pour un petit jeu.
Dans la classe de l'interface nommée "UI", il y a une méthode: AddButton (pour ajouter un bouton à l'interface) qui prend en arguments les informations nécessaire à la création de ce bouton.
Bien sûr, il y a une classe Button qui une fonction "BindAction" (lorsque le bouton est actionné, la fonction associée au bouton est exécutée).
Le problème: c'est qu'il faut bien la relier cette fonction a mon pointeur dans la classe Bouton.
La classe bouton:
La fonction d'ajout de bouton dans l'interface (en réalité elle est plus complexe mais je la simplifie en donnant que la fonction à bind):
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 //.h class Button { public: void BindAction(std::function<void()> *function); void PlayAction(); private: std::function<void()> m_function; } //.cpp void Button::BindAction(function<void()> *function) { m_function = bind(&function); } void Button::PlayAction() { m_function(); }
Et pour finir la création de l'UI + Bouton dans la le jeu en essayant de binder un simple fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void UI::AddButton(function<void()> function) { ButtonArray.push_back(Button()) //Ajout d'un bouton ButtonArray.back().BindAction(&function); }
La compilation ne s'effectue pas et j'ai tout un tas d'erreur en rapport avec la "functional.h":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 UI MyUI; MyUI.AddButton(&Game::TestFunction);
error C2664: 'void std::_Func_class<_Ret,>::_Set(std::_Func_base<_Ret,> *)' : cannot convert argument 1 from '_Myimpl *' to 'std::_Func_base<_Ret,> *'
1> with
1> [
1> _Ret=void
1> ]
Je ne vous donne qu'une partie mais d'après ce que j'ai compris ça un rapport avec l'emplacement de la fonction dite (Game:: ).
Le problème c'est que je n'es pas trouvé de tuto ou d'exemple sur le std::bind de fonction de type void ne prenant pas d'arguments
Cependant, il existe peut être une autre méthode plus simple pour mon problème étant donné le simple "reliage" de deux fonctions !
Merci![]()
Partager