存储Lua回调函数

我有一个游戏,我正在集成 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() 返回的 sprite 对象上

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: terminating with uncaught exception of type std::__1::bad_function_call: std::exception

我将 mCallback 声明为私有:

std::function<void()> mCallback = NULL;

我不确定这里发生了什么。

点赞
用户3042749
用户3042749

我怀疑 mCallback 的声明方式可能有问题。

2015-06-11 23:57:57