Luabridge:返回C ++生命周期管理对象

时间:2013-04-25 05:24:52

标签: c++ binding lua luabridge

此剪辑适用于基本类型:

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)

1 个答案:

答案 0 :(得分:2)

newest 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个对象并将它们传递给其他Lua绑定函数RefCountedPtr<A>

在lua中你可以这样使用它:

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

local b=SomeA()
--do something with b...