I use luabind as my lua for a C ++ shell. Luabind offers a method for using my own callback function to handle the exceptions thrown by lua, set_pcall_callback (). So I paraphrased the example from the documentation, the changes being the function logger-> log () and putting the function in a class called "Engine", so instead of a regular global function, it is now a member function, which is where my problem seems.
Here are the relevant code abbreviations:
class Engine //Whole class not shown for brevity { public: Engine(); ~Engine(); void Run(); int pcall_log(lua_State*); private: ILogger *logger; }; Engine::Run() { lua_State* L = lua_open(); luaL_openlibs(L); open(L); luabind::set_pcall_callback(&Engine::pcall_log); //<--- Problem line //etc...rest of the code not shown for brevity } int Engine::pcall_log(lua_State *L) { lua_Debug d; lua_getstack( L,1,&d); lua_getinfo( L, "Sln", &d); lua_pop(L, 1); stringstream ss; ss.clear(); ss.str(""); ss << d.short_src; ss << ": "; ss << d.currentline; ss << ": "; if ( d.name != 0) { ss << d.namewhat; ss << " "; ss << d.name; ss << ") "; } ss << lua_tostring(L, -1); logger->log(ss.str().c_str(),ELL_ERROR); return 1; }
Here is what the compiler says at compile time:
C:\pb\engine.cpp|31|error: cannot convert 'int (Engine::*)(lua_State*)' to 'int (*)(lua_State*)' for argument '1' to 'void luabind::set_pcall_callback(int (*)(lua_State*))'|
So it seems that the error is that the function is expecting a regular function pointer, not a function pointer of a class member. Is there a way to cast or use an intermediate function pointer to jump to set_pcall_callback ()?
Thanks!
source share