课内的luabridge类对象

时间:2014-05-05 11:39:03

标签: c++ lua luabridge

奇怪的问题我有一个使用多个类的程序,其中一些类用于定义其他类中的对象,但是我不能修改它们的值,不确定这是否有意义,但我会尝试和证明

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

2 个答案:

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