lundi 30 mai 2016

How can I bind a member function to a std::function?

I want to do an array of OIS::Keys (int) and of std::function.

I have this :

struct UserCommands
{
  OIS::KeyCode key;
  std::function<bool(Worms *, const Ogre::FrameEvent& evt)> func;
};

UserInput input;

UserCommands usrCommands[] =
{
  {
    OIS::KC_A, std::bind(&input, &UserInput::selectBazooka)
  },
};

But when I try to compile this I have this compile error :

    In file included from includes/WormsApp.hh:5:0,
                     /src/main.cpp:2:
/includes/InputListener.hh:26:25: error: could not convert ‘std::bind(_Func&&, _BoundArgs&& ...) [with _Func = UserInput*; _BoundArgs = {bool (UserInput::*)(Worms*, const Ogre::FrameEvent&)}; typename std::_Bind_helper<std::__is_socketlike<_Func>::value, _Func, _BoundArgs ...>::type = std::_Bind<UserInput*(bool (UserInput::*)(Worms*, const Ogre::FrameEvent&))>](&UserInput::selectBazooka)’ from ‘std::_Bind_helper<false, UserInput*, bool (UserInput::*)(Worms*, const Ogre::FrameEvent&)>::type {aka std::_Bind<UserInput*(bool (UserInput::*)(Worms*, const Ogre::FrameEvent&))>}’ to ‘std::function<bool(Worms*, const Ogre::FrameEvent&)>’
         OIS::KC_A, std::bind(&input, &UserInput::selectBazooka)
                             ^

What have I done wrong ?

Aucun commentaire:

Enregistrer un commentaire