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

lua 文件如下:

eta = test.ETALink();
print("---- ", eta.coor3D_1.lon); //这个是 OK 的,我可以看到 eta.coor3D_1.lon
eta.coor3D_1.lon = 11 //?? 这是不对的,我打印出来的 eta.coor3D_1.lon 不是 11

现在我的问题是为什么 eta.coor3D_1.lon = 11 不起作用呢? 我发现双引号中的 "." 无法起作用...

点赞
用户1901411
用户1901411

这是因为你的类成员(coor3D_1)作为一个副本传递给了 Lua,所以当你改变它的值时,你改变的是副本,而原始对象没有受到影响。

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

  • 添加一个ETALink属性,该属性直接操作经度字段。
  • 使 coor3D_1 成为返回指向 Coor3D_1 结构的指针的属性。
2018-03-21 19:06:17