Передать объект C ++ в функцию Lua, используя LuaBridge или Lua - PullRequest
0 голосов
/ 18 октября 2018

У меня есть большой объект, построенный из C ++ (который я выставил Lua), и я хочу, чтобы его обрабатывали в Lua.

Я могу передать любой простой тип функции Lua (int, string), используя lua_pushinteger, lua_pushstring, но не класс C ++.Я попытался lua_pushlightuserdata, нажав указатель на мой объект, но не повезло.

function process(object) --object is the c++ passed function
--return processed data
end

Как я могу это сделать?Это вообще возможно?

Обратите внимание, что я хочу передать Lua конкретный экземпляр, созданный в C ++.Я могу выставить конструктор и просто использовать класс, но мне нужно сделать класс одиночным.Это недопустимо.

1 Ответ

0 голосов
/ 18 октября 2018

Если вы зарегистрировали свой класс с помощью LuaBridge, то вам нужно вставить указатель объекта в машину состояний Lua, используя методы LuaBridge.LuaBridge нажимает на указатель, а затем устанавливает метаинформацию об объекте, используя lua_setmetatable.Этот метатабль содержит фактическое описание объекта.

using namespace luabridge;
// L = lua_state*

// Register class
getGlobalNamespace(L)
.beginClass<MyObjectClass>("MyObjectClass")
    .addData<float>("value", &MyObjectClass::value)
    .addFunction("method", &MyObjectClass::method)
.endClass();

MyObjectClass myObject; // single instance

// lookup script function in global table
LuaRef processFunc = getGlobal(L, "process");

if(processFunc.isFunction()){
     processFunc(&myObject);
}

Lua script

function process(object) --object is the c++ passed function
   local a = object:method("params")
   return object.value * a;
end
...