std::Bind : une fonction de type void sans arguments
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:
Code:
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();
} |
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:
1 2 3 4 5 6
|
void UI::AddButton(function<void()> function)
{
ButtonArray.push_back(Button()) //Ajout d'un bouton
ButtonArray.back().BindAction(&function);
} |
Et pour finir la création de l'UI + Bouton dans la le jeu en essayant de binder un simple fonction.
Code:
1 2 3
|
UI MyUI;
MyUI.AddButton(&Game::TestFunction); |
La compilation ne s'effectue pas et j'ai tout un tas d'erreur en rapport avec la "functional.h":
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 :)