2013-05-26 58 views
0

我需要使用luabind注册一个成员函数,它应该将lua函数作为参数。对于任何正常功能我通常只是这样做:但是如何用lua-function参数使用luabind注册成员函数?

int SomeLuaFunction(lua_State *l) 
{ 
    luaL_checkfunction(l,1); 
    int fc = luaL_ref(l,LUA_REGISTRYINDEX); 
    [...] 
} 

Luabind使用的参数列表,所以我不知道该如何告诉它我期待的功能:

void Lua_ALSound_CallOnStateChanged(lua_State *l,boost::shared_ptr<ALSound> pAl,<function-parameter?>) 
{ 
    [...] 
} 
lua_bind(luabind::class_<ALSound COMMA boost::shared_ptr<ALSound>>("ALSound") 
    .def("CallOnStateChanged",&Lua_ALSound_CallOnStateChanged) 
); 

(仅代码的相关部分在这里显示,lua_bind使用luabind ::模块)

卢阿 - 例如我想要做到:

local al = ALSound() -- I'm aware this wouldn't work since I haven't defined a constructor 
al:CallOnStateChanged(function() 
    [...] 
end) 

也许有一种方法可以将附加函数添加到已经注册的类中,而不需要luabind?任何建议,将不胜感激。

回答

0

如果您希望能够拥有一个以Lua对象为参数的函数,那么您应该使用函数luabind::object作为参数。然后你可以检查它是否是一个函数,如果是的话就调用它。

+0

嗯,我简直不敢相信那么简单。谢谢,它完美的工作! – Silverlan

+2

@Silverlan:如果您想要感谢某人的答案,请接受答案旁边的复选标记。 –

相关问题