Python 側で生成された swig ラップ オブジェクトと、C++ 側で生成されたラップ オブジェクトについて質問があります。次の単純な C++ クラス定義があるとします。
#include <vector>
class Sphere
{
public:
Sphere(){};
};
class Container
{
public:
Container() : data_(0) {};
void add() {
data_.push_back(Sphere());
}
Sphere & get(int i) { return data_[i]; }
std::vector<Sphere> data_;
};
そして、次のswigセットアップ
%module engine
%{
#define SWIG_FILE_WITH_INIT
#include "sphere.h"
%}
// -------------------------------------------------------------------------
// Header files that should be parsed by SWIG
// -------------------------------------------------------------------------
%feature("pythonprepend") Sphere::Sphere() %{
print 'Hello'
%}
%include "sphere.h"
次に、Pythonで次のことを行うと
import engine
sphere_0 = engine.Sphere()
container = engine.Container()
container.add()
sphere_1 = container.get(0)
次に、ラップされた Sphere クラスの最初のインスタンス化で、Python ラッピング インターフェイスのinitメソッドが呼び出されます (「Hello」が出力されます)。
ただし、インスタンスが C++ 側で生成される 2 番目のインスタンスは生成されません ('Hello' は出力されません)。
私の目標は、オブジェクトの作成時に追加の Python 機能をオブジェクトに追加できるようにすることなので、上記の両方のインスタンス化シナリオについて、これを達成するための正しいアプローチについて誰かが何か指針を持っているかどうかを聞いて喜んでいます。
よろしくお願いします、
マッツ