чтобы я мог вызывать функции для уже созданного класса C ++ внутри Lua.
Если вы используете Luabind для создания класса, а затем предоставляете членов этого класса, то Luabind сделает именно это. Это предоставит Lua класс, в котором есть члены.
Вы не можете вызывать функцию-член в C ++ без объекта типа этого класса. И поэтому, когда вы предоставляете класс и его члены через Luabind, вы не сможете вызывать функции-члены в Lua без объекта этого класса.
Поэтому, если у вас есть какой-то глобальный объект Manager
, правильный способ показать это Lua - это открыть сам объект Lua. Используйте Luabind, чтобы получить глобальную таблицу, затем поместите в нее указатель на ваш объект Manager. Кроме того, вы можете передать экземпляр объекта Manager
в качестве параметра при выполнении сценария.
Второй метод будет работать примерно так:
//Load the script as a Lua chunk.
//This pushes the chunk onto the Lua stack as a function.
int errCode = luaL_loadfile(L, "Manager.lua");
//Check for errors.
//Get the function from the top of the stack as a Luabind object.
luabind::object compiledScript(luabind::from_stack(L, -1));
//Call the function through Luabind, passing the manager as the parameter.
luabind::call_function<void>(compiledScript, this);
//The function is still on the stack from the load call. Pop it.
lua_pop(L, 1);
Ваш скрипт Lua может получить экземпляр с помощью механизма Lua varargs:
local manager = ...
manager:newObject("Object", 1234)
manager:printAll()