在Lua中注册函数时如何使用std :: bind?

时间:2017-04-09 17:33:34

标签: c++ c c++11 lua

在问题如何在l ++中将成员函数注册到lua而没有lua bind one answer建议使用以下代码:

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");

(按原样引用,包括 std::placeholders 中的小错误)

然而,我告诉你不要这样做。我收到的错误消息指出std::bind返回的函数无法转换为lua_CFunction

我也尝试将blah的返回类型更改为int,但我收到了相同的错误消息。如果它对任何人都有帮助,那么完整的错误消息是:

Error   C2664   'void lua_pushcclosure(lua_State *,lua_CFunction,int)': cannot convert argument 2 from 'std::_Binder<std::_Unforced,int (__thiscall C::* )(lua_State *),C *,const std::_Ph<1> &>' to 'lua_CFunction'

我甚至尝试将&C::blah更改为&inst.blah,但这并不令人惊讶地发挥作用。

有没有人让它上班?或者只是不打算工作?

0 个答案:

没有答案