在类中有一个 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 的构造函数将 c 设置为 666,则程序输出 666。

点赞
用户88888888
用户88888888

我只需要将类B中类A的对象变成一个指针就可以了,但我不确定为什么要这样做...在大约两天的调试过程中,我才发现这一点。

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();
2014-05-06 22:25:28
用户4082632
用户4082632

在 Lua 中,声明为 Type variableName 的对象是按值传递的,是一份由 Lua 管理的副本。 因此,var.d 返回的是该 d 对象的副本,而 var.d.c 会修改该副本的 c 变量,而不是原始 d 对象的 c 变量。

而声明为 Type* variableName 的对象是通过引用传递的,因此您修改的是原始的 d 对象,这就是为什么您的第二种方法有效的原因。

更多信息请参见 LuaBridge 手册

2014-09-26 09:05:55