使用 LuaBridge 或 Lua 将 C++ 对象传递给 Lua 函数
Pass C++ object to Lua function using LuaBridge or Lua
我有一个用 C++ 构造的大对象(我已经接触到 Lua),我想在 Lua 中进行处理。
我可以使用 lua_pushinteger
、lua_pushstring
将任何简单类型传递给 Lua 函数(int
、string
),但 C++ class。我尝试 lua_pushlightuserdata
将指针推送到我的对象,但没有成功。
function process(object) --object is the c++ passed function
--return processed data
end
我该怎么做?这可能吗?
请注意,我想将用 C++ 构造的特定实例传递给 Lua。我可以公开构造函数并简单地使用 class 但我需要将 class 设为单例。这是不可接受的。
如果您使用 LuaBridge 注册了 class,那么您必须使用 LuaBridge 方法将对象指针推送到 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
我有一个用 C++ 构造的大对象(我已经接触到 Lua),我想在 Lua 中进行处理。
我可以使用 lua_pushinteger
、lua_pushstring
将任何简单类型传递给 Lua 函数(int
、string
),但 C++ class。我尝试 lua_pushlightuserdata
将指针推送到我的对象,但没有成功。
function process(object) --object is the c++ passed function
--return processed data
end
我该怎么做?这可能吗?
请注意,我想将用 C++ 构造的特定实例传递给 Lua。我可以公开构造函数并简单地使用 class 但我需要将 class 设为单例。这是不可接受的。
如果您使用 LuaBridge 注册了 class,那么您必须使用 LuaBridge 方法将对象指针推送到 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