我有一个使用 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); //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 不起作用?我发现双"."行不通。
发生这种情况是因为您的类字段成员 (coor3D_1( 作为副本传递给 Lua,因此当您更改其值时,您会更改副本,并且原始对象不受影响。
也许您可以通过以下方式解决问题:
- 添加一个直接在 lon 字段上运行的 ETALink 属性。
- 使coor3D_1成为返回指向Coor3D_1结构的指针的属性。