修改bindings-generator(参考这个commit)
https://github.com/WuJiayiSH/bindings-generator/commit/06359705692de53ff00f14ef7b4d97d9e2ecf7e5
为了释放lua回调,用了一个智能指针来包装lua函数并传到lambda里(参考了js的lambda实现),这样lua回调会跟着lambda销毁。所以要加一个包装类到LuaBasicConversions.h
class LuaFunctionWrapper
{
public:
LuaFunctionWrapper(lua_State* L, LUA_FUNCTION handler);
~LuaFunctionWrapper();
lua_State* getLuaState() {return _state;};
LUA_FUNCTION getLuaFunction() {return _handler;};
private:
lua_State* _state;
LUA_FUNCTION _handler;
};
实现加到LuaBasicConversions.cpp
LuaFunctionWrapper::LuaFunctionWrapper(lua_State* L, LUA_FUNCTION handler):
_state(L),
_handler(handler)
{
}
LuaFunctionWrapper::~LuaFunctionWrapper()
{
toluafix_remove_function_by_refid(_state, _handler);
}
最后重新绑定一下