LuaBridge 和成员函数

我今天刚刚下载了 LuaBridge 并且到目前为止非常满意。我注意到一件事情,就是我可以绕过必须将 lua_State 作为函数参数的常规要求。

我可以这样做:

void love(int i) {std::cout << i;}

luabridge::getGlobalNamespace(lua)
  .addFunction("love", love);

-- Lua file
love(8)

它会正常工作,但是如果我做任何如下的操作:

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 代码可以毫无问题地这样做。我在这里做错了什么?

点赞
用户847349
用户847349

你必须使用方法调用语法

c:MemFunction(10)

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

2012-11-13 05:42:50