Этот разрез работает для основных типов:
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)
в новейший 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...
Других решений пока нет …