0

我有一个用 C++ 构造的大对象(我已经暴露给 Lua),我想在 Lua 中处理。

我可以使用 将任何简单类型传递给 Lua 函数 ( int, string) lua_pushintegerlua_pushstring但不能使用 C++ 类。我尝试lua_pushlightuserdata过将指针推送到我的对象,但没有运气。

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

我怎样才能做到这一点?这甚至可能吗?

请注意,我想将一个用 C++ 构造的特定实例传递给 Lua。我可以公开构造函数并简单地使用类,但我需要使类成为单例。这是不可接受的。

4

1 回答 1

1

如果您已经使用 LuaBridge 注册了您的类,那么您必须使用 LuaBridge 方法将 Object 指针推入 Lua 状态机。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 脚本

function process(object) --object is the c++ passed function
   local a = object:method("params")
   return object.value * a;
end
于 2018-10-18T18:04:59.997 回答