luabridge связывает член C++, но не меняет значение члена

У меня есть вопрос с помощью luabridge, он не может изменить значение C++, для экзамена:

// файлы C++

struct Coor3D_1 {
    int lon;
};
class ETALink{
public:
ETALink()
{

}
Coor3D_1 coor3D_1;
};

код привязки ниже:

luabridge::getGlobalNamespace(L)
.beginNamespace("test")
.beginClass<Coor3D_1>("Coor3D_1")
.addData("lon", &Coor3D_1::lon)
.endClass()

.beginClass<ETALink>("ETALink")
.addConstructor<void(*) (void)>()
.addData("coor3D_1", &ETALink::coor3D_1)
.endClass()
.endNamespace();

Луа файлы ниже:

eta = test.ETALink();
print("---- ", eta.coor3D_1.lon); //this is OK, I can see eta.coor3D_1.lon
eta.coor3D_1.lon = 11 //?? this is not OK, I print  eta.coor3D_1.lon is not 11

Теперь мой вопрос: почему eta.coor3D_1.lon = 11 не работает? Я нахожу это двойное "." не будет работать....

1 ответ

Это происходит потому, что ваш член поля класса (coor3D_1) передается Lua как копия, поэтому при изменении его значения вы изменяете копию, и на исходный объект это не влияет.

Вероятно, вы можете решить эту проблему одним из следующих способов:

  • Добавьте свойство ETALink, которое напрямую работает с полем lon.
  • Сделайте coor3D_1 свойством, возвращающим указатель на структуру Coor3D_1.
Другие вопросы по тегам