类中的lubridge类对象

luabridge class object inside class

本文关键字:对象 lubridge      更新时间:2023-10-16

奇怪的问题我有一个使用多个类的程序其中一些类用于定义其他类内部的对象但我不能修改它们的值不确定这是否有意义但我将尝试演示

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