J'ai cette signature de la fonction que je dois correspondreAide bind boost/fonctions
typedef int (*lua_CFunction) (lua_State *L);//target sig
Voici ce que j'ai jusqu'à présent:
//somewhere else...
...
registerFunction<LuaEngine>("testFunc", &LuaEngine::testFunc, this);
...
//0 arg callback
void funcCallback0(boost::function<void()> func, lua_State *state)
{
func();
}
template<typename SelfType>
void registerFunction(const std::string &funcName, boost::function<void (SelfType*)> func, SelfType *self)
{
//funcToCall has to match lua_CFunction
boost::function<void (lua_State *)> funcToCall = boost::bind(&LuaEngine::funcCallback0, this,
boost::bind(func, self), _1);
lua_register(_luaState, funcName.c_str(), funcToCall);
}
Cependant, à lua_register(_luaState...
, il se plaint encore de problèmes de conversion
erreur 1 erreur C2664: 'lua_pushcclosure': ne peut pas convertir paramètre 2 de 'boost :: fonction' à 'lua_CFunction'
Quelqu'un sait comment cela peut être résolu?
Une question plus large qui touche le même problème général de conversion de 'boost :: function' en pointeurs C simples: http://stackoverflow.com/questions/282372/demote-boostfunction-to-a-plain-function- pointeur –