gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:31:05 26 4
gpt4 key购买 nike

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

我可以使用 lua_pushintegerlua_pushstring 将任何简单类型传递给 Lua 函数(intstring)但不是 C++ 类。我已经通过将指针推送到我的对象来尝试 lua_pushlightuserdata 但没有成功。

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

我该怎么做?这可能吗?

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

最佳答案

如果您使用 LuaBridge 注册了您的类,那么您必须使用 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++ - 使用 LuaBridge 或 Lua 将 C++ 对象传递给 Lua 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52878369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com