Storing Lua callback functions

348 Views Asked by At

I have a game I am integrating with Lua scripting in order to allow customization.

I am using a C++ Lua wrapper: https://github.com/tomaka/luawrapper

In my Lua script I am calling something like this:

function sprite_factory()
  local sprite = sprite_new() -- register_new_sprite(name)
  sprite:RegisterCallback("on_activate", function ()
    sprite:SetState("closed")
  end)
end

In my C++ code I have built a Sprite class and I'm using registerFunction to make the member methods available to Lua e.g. RegisterCallback is called on the sprite object returned by sprite_new()

bool RegisterCallback(const std::string hook, const std::function<void()> callback) {
    callback();
    mCallback = callback;
    return true;
}

If I do the callback inside the RegisterCallback method, it works fine. However, I want to store the callback to be used as a raised event.

When I call this method later in my code:

void DoCallback() {
    mCallback(); //raises exception
}

I get an exception:

libc++abi.dylib: terminating with uncaught exception of type std::__1::bad_function_call: std::exception

I am declaring mCallback as a private:

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

I'm not sure what is going on here.

1

There are 1 best solutions below

0
On

I would suspect that there is an issue with the way mCallback is declared.