次の 2 つの方法でポインターを使用するクラスを持ついくつかの C++ ヘッダー ファイルをラップしようとしています。
1) クラスのデータ メンバーとして配列として。
2) 関数の引数として配列として
これらのクラスは Python でサブクラス化され、メソッドはオーバーライドされます。
ヘッダー ファイルの例は次のようになります。
struct Array{
int * array;
int array size;
}
class A{
public:
//Meant to be accessed as an array
virtual void func( int size, double * array) = 0;
virtual bool func2(long size1, long size2, float * array1, int * array2) = 0;
}
いずれの場合も、配列はサイズが静的であることを意図しています。ただし、場合によっては、配列が初期化されている場合もあれば、そうでない場合もあります (つまり、ポインター = NULL)。
私が理解する必要があるのは:
1) C++ 配列がクラスのデータ メンバーである場合、どのようにラップしますか?
2) 関数に引数として渡される C++ 配列をどのように処理しますか?
3) Python でラップされた配列をどのように割り当てて初期化しますか?
4) Python で行われた変更が元の配列に戻され、元の配列への変更が Python に反映されるように、C++ 配列をどのようにラップしますか?
編集:
SWIG、cytpes、Cython、Boost-Python について 4 つの質問すべてに対する回答を議論することを要求しているわけではありません。4つすべてについて議論するのはいいことですが、それは少し多くのことを求めていることに気づきました。
SWIG を使用する応答を好みます。ただし、この問題の解決策を自分で見つけようとしたときに、Python 拡張システムのいずれかでこれを達成する方法に関する情報がまばらであることがわかったため、4 つすべてにタグを付けました。
私の望みは、C++ コードをラップしようとしたときに再発する問題の良い出発点を作成することでした.