привязка — 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...
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]