2

SWIGドキュメントを読んでいる間に、これらの行にたどり着きました..

C/C++ グローバル変数は、SWIG によって完全にサポートされています。ただし、Python の割り当てが機能する方法が原因で、基になるメカニズムは予想とは多少異なります。
Python a = 3.4で次のように入力する
と、「a」は値 3.4 を含むオブジェクトの名前になります。後で
b = aと入力
すると、"a" と "b" は両方とも値 3.4 を含むオブジェクトの名前になります。したがって、3.4 を含むオブジェクトは 1 つだけであり、"a" と "b" は両方ともそれを参照する名前です。これは、変数名が値が格納されるメモリ位置を参照する C とはまったく異なります (そして代入はデータをその位置にコピーします)。このため、C の変数割り当てを Python の変数割り当てに直接マップする方法はありません。
C グローバル変数へのアクセスを提供するために、SWIG は、各 SWIG 生成モジュールに追加される「cvar」と呼ばれる特別なオブジェクトを作成します。グローバル変数は、このオブジェクトの属性としてアクセスされます。

私の質問は、上記の方法で実装する必要があることです。上記の方法で実装しましたが、オブジェクト属性もオブジェクトとして実装されます。

以下の python コード スニペットを参照してください。

a = 10  
b = a  
a is b  
True  

class sample: 
    pass   

obj = sample()  
obj.a = 10  
obj.b = obj.a  
obj.a is obj.b  
True  

上記の両方のケースで、オブジェクトの割り当ては同じように行われます

4

1 に答える 1