在问题如何在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
,但这并不令人惊讶地发挥作用。
有没有人让它上班?或者只是不打算工作?