我需要使用luabind注册一个成员函数,该函数应该以lua函数作为参数。对于任何普通函数,我通常会这样做:
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::模块)
lua-我正在尝试实现的示例:
local al = ALSound() -- I'm aware this wouldn't work since I haven't defined a constructor
al:CallOnStateChanged(function()
[...]
end)也许有一种方法可以在不使用luabind的情况下向已经注册的类添加额外的函数?如有任何建议,我们将不胜感激。
发布于 2013-05-26 20:54:36
如果你想拥有一个接受Lua对象作为参数的函数,你应该让这个函数接受一个luabind::object作为参数。然后,您可以检查它是否是一个函数,如果是,则调用它。
https://stackoverflow.com/questions/16759408
复制相似问题