странная проблема У меня есть программа, которая использует несколько классов, некоторые из этих классов используются для определения объектов внутри другого класса, но я не могу изменить их значения, не уверен, что это имеет смысл, но я постараюсь продемонстрировать
Файл 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
Объект объявлен как Type variableName
передается Lua по значению, как копия, управляемая Lua. следовательно var.d
возвращает копию этого d
объект, и с var.d.c
вы модифицируете c
переменная этой копии, а не c
переменная оригинала d
объект.
Объект объявлен как Type* variableName
передается по ссылке, следовательно, вы модифицируете оригинал d
объект, вот почему ваш второй подход работает.
Больше информации в LuaBridge инструкция.
Все, что мне нужно было сделать, это сделать объект класса 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();