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
只是为了澄清A&#39的构造函数是否将c设置为666然后程序输出666
答案 0 :(得分:2)
声明为Type variableName
的对象按值传递给Lua,作为由Lua管理的副本。因此,var.d
会返回该d
个对象的副本,而var.d.c
则会修改该副本的c
变量,而不是原始的c
变量d
对象。
声明为Type* variableName
的对象通过引用传递,因此您可以修改原始d
对象,这就是您的第二种方法有效的原因。
LuaBridge manual中的更多信息。
答案 1 :(得分:0)
我所要做的就是让B类中A类的对象成为指针,我不知道为什么......我只是在大约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();