luabridge绑定C ++成员,但不更改成员值

时间:2018-03-04 03:14:34

标签: luabridge

我有一个问题,使用luabridge,它改变C ++值失败,为考试:

// c ++ files

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();

lua文件如下:

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 个答案:

答案 0 :(得分:0)

这是因为您的类字段成员(coor3D_1)作为副本传递给Lua,因此当您更改其值时,您更改副本,原始对象不会受到影响。

可能你可以通过以下方式解决问题:

  • 添加一个直接在lon字段上运行的ETALink属性。
  • 使coor3D_1成为返回指向Coor3D_1结构的指针的属性。