类中的lubridge类对象
luabridge class object inside class
奇怪的问题我有一个使用多个类的程序其中一些类用于定义其他类内部的对象但我不能修改它们的值不确定这是否有意义但我将尝试演示
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的构造函数设置c为666,那么程序输出666
声明为Type variableName
的对象按值传递给Lua,作为Lua管理的副本。因此,var.d
返回该d
对象的副本,并且对于var.d.c
,您正在修改该副本的c
变量,而不是原始d
对象的c
变量。
声明为Type* variableName
的对象是通过引用传递的,因此你修改了原来的d
对象,这就是为什么你的第二种方法有效。
我所要做的就是使类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();
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 类中的lubridge类对象