0

奇妙な問題複数のクラスを使用するプログラムがあります.これらのクラスのいくつかは他のクラス内のオブジェクトを定義するために使用されますが、それらの値を変更することはできません.

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を出力します

4

2 に答える 2

1

as として宣言されたオブジェクトはType variableName、Lua によって管理されるコピーとして、値によって Lua に渡されます。したがって、そのオブジェクトvar.dのコピーを返し、元のオブジェクトの変数ではなく、そのコピーの変数を変更しています。dvar.d.cccd

として宣言されたオブジェクトはType* variableName参照によって渡されるため、元のdオブジェクトを変更します。これが、2 番目のアプローチが機能する理由です。

詳しくはLuaBridgeのマニュアルをご覧ください。

于 2014-09-26T09:05:55.877 に答える