0

我需要使用 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 的情况下向已经注册的类添加额外的功能?任何建议,将不胜感激。

4

1 回答 1

1

如果你想拥有一个以 Lua 对象为参数的函数,你应该让函数以 aluabind::object作为参数。然后你可以检查它是否是一个函数,如果是则调用它。

于 2013-05-26T12:54:35.820 回答