Luabridge:返回C++生命周期受控对象。

这种方式适用于基本类型:

int CreateBasicObject(lua_State *L)
{
    int ret0;

    lua_pushinteger(L, ret0);

    return 1;
}

在 Lua 中,它看起来像这样:

local NewObject=CreateBasicObject()

我该如何返回类而不是整数

push(L,&MyObject);
return 1;

似乎不能正常工作,Lua 部分看起来像这样:

self.MyObject=Screen.MyObject();

错误是:

attempt to index field 'MyObject' (a number value)
点赞
用户847349
用户847349

在最新的 LuaBridge 版本中,您可以使用 RefCountedPtr,例如:

一些 C++ 定义

struct A {};

static RefCountedPtr<A> SomeA() {
 return RefCountedPtr<A>(new A);
}

然后进行绑定:

luabridge::getGlobalNamespace(L)
  .beginClass<A>("A")
   .addConstructor< void (*) (), RefCountedPtr<A> >()
  .endClass()

  .addFunction("SomeA",&SomeA);

现在您可以安全地返回 A 对象并将它们作为 RefCountedPtr<A> 传递给其他 Lua-bound 函数。

在 Lua 中,您可以像这样使用它:

local a=A()
--do something with a...

local b=SomeA()
--do something with b...
2013-04-25 08:43:25