Luabridge: возвращение управляемого объекта времени жизни C++

Этот разрез работает для основных типов:

int CreateBasicObject(lua_State *L)
{
    int ret0;

    lua_pushinteger(L, ret0);

    return 1;
}

и в Луа это выглядит так:

local NewObject=CreateBasicObject()

Как бы я мог вернуть классы вместо целых?

push(L,&MyObject);
return 1;

похоже, работает неправильно, часть lua выглядит так:

self.MyObject=Screen.MyObject(); 

И ошибка:

attempt to index field 'MyObject' (a number value)

1 ответ

Решение

В новейшей версии 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...
Другие вопросы по тегам