我需要使用 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::module)
我正在尝试完成的 lua 示例:
local al = ALSound() -- I'm aware this wouldn't work since I haven't defined a constructor
al:CallOnStateChanged(function()
[...]
end)
也许有一种方法可以在没有 luabind 的情况下向已经注册的类添加额外的功能?任何建议,将不胜感激。