如何使用luabind注册具有lua函数参数的成员函数?

我需要使用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() -- 我知道这不能生效,因为我还没有定义构造函数
al:CallOnStateChanged(function()
    [...]
end)

也许有一种方法可以在没有luabind的情况下向已注册的类添加其他函数吗?任何建议将不胜感激。

点赞
用户734069
用户734069

如果你想要一个能够接受 Lua 对象作为参数的函数,你应该让函数接受一个 luabind::object 作为参数。然后你可以检查它是否是一个函数,并且如果它是函数,你就可以调用它。

2013-05-26 12:54:35