我有一个游戏,我正在与Lua脚本集成,以便进行自定义。
我使用的是C ++ Lua包装器: https://github.com/tomaka/luawrapper
在我的Lua脚本中,我称之为:
function sprite_factory()
local sprite = sprite_new() -- register_new_sprite(name)
sprite:RegisterCallback("on_activate", function ()
sprite:SetState("closed")
end)
end
在我的C ++代码中,我构建了一个Sprite类,我使用registerFunction
使成员方法可用于Lua,例如在RegisterCallback
sprite_new()
bool RegisterCallback(const std::string hook, const std::function<void()> callback) {
callback();
mCallback = callback;
return true;
}
如果我在RegisterCallback
方法中进行回调,它可以正常工作。但是,我想将回调存储为用作引发事件。
稍后在我的代码中调用此方法时:
void DoCallback() {
mCallback(); //raises exception
}
我得到一个例外:
libc ++ abi.dylib:以未捕获的类型异常终止 std :: __ 1 :: bad_function_call:std :: exception
我将mCallback声明为私有:
std::function<void()> mCallback = NULL;
我不确定这里发生了什么。
答案 0 :(得分:0)
我怀疑mCallback的声明方式存在问题。