Luabridge和成员功能

LuaBridge and Member Functions

本文关键字:功能 成员 Luabridge      更新时间:2023-10-16

我今天刚刚下载了 luabridge ,到目前为止对此感到非常满意。我注意到的一件事是,我能够规避将lua_state作为功能参数的正常要求。

我可以做到这一点:

//C++ files
void love(int i) {std::cout << i;}
luabridge::getGlobalNamespace(lua)
  .addFunction("love", love);
-- Lua file
love(8)

它可以正常工作,但是如果我对以下效果做任何事情:

//C++ files
struct Tester {
  int number;
  void MemFunction (int i) { std::cout << i;}
  static void Register(lua_State*); 
};
void Tester::Register(lua_State *lua) {
  luabridge::getGlobalNamespace(lua)
    .beginClass<Tester>("Tester")
    .addConstructor <void (*) (void)> ()
    .addData("number", &Tester::number)
    .addFunction("MemFunction", &Tester::MemFunction)
 .endClass();
}
--Lua file
  c = Tester()      -- works...
  c.number = 1      -- works...
  c.MemFunction(10) -- nothing!

我在文档中没有阅读的任何内容都表明无法注册具有非lua_state参数的成员函数,而且我已经看到了一些Luabridge代码,毫无问题。我在这里做错了什么?

您必须使用方法调用语法

c:MemFunction(10)

我建议您使用GitHub的较新版本,该版本具有广泛的文档。它还允许有关输入参数和返回值的一些额外的灵活性。