使用 LuaBridge 或 Lua 将 C++ 对象传递给 Lua 函数

我有一个由 C++ 构建的大型对象(我已经将其暴露给 Lua),并且我希望在 Lua 中对其进行处理。

我可以使用 lua_pushintegerlua_pushstring 来传递任何简单类型的 Lua 函数(如 intstring),但不能传递 C++ 类。我尝试使用 lua_pushlightuserdata,通过将指向我的对象的指针推入栈中来实现,但没有成功。

function process(object) --object 表示传递的 C++ 对象
--返回处理后的数据
end

我该如何做呢?这是否可能?

请注意,我希望将在 C++ 中构造的特定实例传递给 Lua。我可以公开构造函数并简单使用类,但我需要将类设置为单例。这是不可接受的。

点赞
用户7949696
用户7949696

如果您使用了 LuaBridge 注册类,那么您需要使用 LuaBridge 方法将对象指针推入 Lua 状态机。LuaBridge 推入指针,然后使用 lua_setmetatable 在对象上设置元信息。这个元表包含对象的实际描述。

using namespace luabridge;
// L = lua_state*

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

MyObjectClass myObject; // 单个实例

// 在全局表中查找脚本函数
LuaRef processFunc = getGlobal(L, "process");

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

Lua 脚本

function process(object) --object 是从 C++ 传递的函数
   local a = object:method("params")
   return object.value * a;
end
2018-10-18 18:04:59