объект класса luabridge внутри класса

странная проблема У меня есть программа, которая использует несколько классов, некоторые из этих классов используются для определения объектов внутри другого класса, но я не могу изменить их значения, не уверен, что это имеет смысл, но я постараюсь продемонстрировать

Файл C ++

class A{
public:
A(){
c = 0
}
int c;
};

class B{
public:
A d;
};

luabridge::getNamespace(L)
.addNamespace("test")
.addClass<A>("A")
.addConstructor<void(*) ()>()
.addData("c", &A::c)
.endClass()
.addClass<B>("B")
.addConstructor<void(*) ()>()
.addData("d", &A::d)
.endClass()
.endNamespace();

Теперь в файле Lua мы имеем

var = test.B()
var.d.c = 2
print(var.d.c)

и программа печатает

0

просто чтобы уточнить, если конструктор А устанавливает c в 666, то программа выводит 666

0

Решение

Объект объявлен как Type variableName передается Lua по значению, как копия, управляемая Lua. следовательно var.d возвращает копию этого d объект, и с var.d.c вы модифицируете c переменная этой копии, а не c переменная оригинала d объект.

Объект объявлен как Type* variableName передается по ссылке, следовательно, вы модифицируете оригинал d объект, вот почему ваш второй подход работает.

Больше информации в LuaBridge инструкция.

2

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

Все, что мне нужно было сделать, это сделать объект класса A внутри класса B указателем, и я не уверен, почему … Я только что нашел его вдоль пути отладки примерно через 2 дня

class A{
public:
A(){
c = 0
}
int c;
};

class B{
public:
A* d;
};

luabridge::getNamespace(L)
.addNamespace("test")
.addClass<A>("A")
.addConstructor<void(*) ()>()
.addData("c", &A::c)
.endClass()
.addClass<B>("B")
.addConstructor<void(*) ()>()
.addData("d", &A::d)
.endClass()
.endNamespace();
0

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