存储Lua回调函数

时间:2015-06-11 23:46:06

标签: c++ 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()
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;

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

1 个答案:

答案 0 :(得分:0)

我怀疑mCallback的声明方式存在问题。