使用LuaBridge或Lua

时间:2018-10-18 16:15:17

标签: c++ lua luabridge

我有一个用C ++构造的大对象(已经接触过Lua),并且希望在Lua中进行处理。

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

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

我该怎么做?那有可能吗?

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

1 个答案:

答案 0 :(得分:1)

如果您已经使用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