このLuaコードは、テーブルを作成し、新しいメンバーを動的に追加します。これを実行すると"hello"
、期待どおりに画面に表示されます。
foo = {}
foo.x = "hello"
print(foo.x)
しかし今、私はSWIGを使用していくつかのC++クラスをLuaにバインドしています。そのために、test.i
(SWIGモジュールファイル)で次のような単純なクラスを作成しました。
%module test
%inline
%{
class Foo
{
public:
Foo() { X = 0; }
void SetX(int x) { X = x; }
int GetX() { return X; }
private:
int X;
};
%}
次に、次のようなテストLuaコードを作成しました。
obj = test.Foo()
obj:SetX(5)
print("Number: " .. obj:GetX())
期待どおりに実行および取得"Number 5"
します。問題は、SWIGでバインドされたオブジェクトに新しいメンバーを動的に追加し、それにアクセスしようとすると、次のようになります。
obj.Y = 7
print("Number: " .. obj.Y)
このエラーメッセージが表示されます:
"attempt to concatenate field 'Y' (a nil value)"
SWIGを使用してバインドされたオブジェクトに新しいメンバーを動的に追加することは可能ですか?別のLuaバインディングライブラリに移動せずにオプションはありますか?