如何在C++中将成员函数注册到Lua,而不使用Lua绑定

我在我的 C++ 游戏项目中使用 Lua 5.1,但是当我尝试注册 C++ 成员函数时遇到了麻烦。 我想在 Lua 中使用我的 C++ 类成员函数,但是 lua_register() 函数的第三个参数只能接受 C 类型的普通函数指针或静态成员函数指针。

我听说 Lua 绑定库可以解决这个问题,但是我不想使用 Lua 绑定库。它很好,但对我的项目来说太重了。 有没有任何不使用库就可以注册 C++ 成员函数的方法? 我应该怎么做?

点赞
用户6087118
用户6087118

前面的答案是正确的。

就这个问题而言,它取决于你从 lua 调用类成员函数时是否希望让 lua 决定要使用的对象,或者你想将其绑定到固定对象实例的成员函数。如果是固定的话,那么使用 std::bind 创建一个函数对象会很容易,该对象持有指向要调用的成员函数的指针以及要使用它的 this 指针,并将其与 lua 注册。

http://en.cppreference.com/w/cpp/utility/functional/bind

代码看起来像这样:

class C {
   public:
      void blah(lua_State* L);
};

C inst;

lua_pushcclosure(L, std::bind(&C::blah, &inst, std::placeholder::_1), 0);
lua_setglobal(L, "blah");

此外,为了更自然地将 C/C++ 函数与 lua 绑定,避免编写包装器,请查看这里:

http://inspired-code.blogspot.com.au/p/automagical-language-bindings-using-c.html

2016-03-19 16:34:44