私はfilter
クラスをC++で実装しています。これをCythonでラップしてPythonで使用するように取り組んでいます。 Cython MyFilter
クラスは現在このようになっています。Cythonコンストラクタの引数を使ってC++オブジェクトを初期化する
cdef class MyFilter:
cdef filter f;
def __cinit__(self, list array_sizes):
cdef vector[size_t] as = array_sizes
self.f.init(as)
def add(self, uint32_t value):
self.f.add(value)
def get(self, uint32_t value):
return self.f.get(value)
もともと、C++クラスは、引数としてstd::vector<size_t>
を取った単一のコンストラクタを持っていました。しかし、Cythonラッパーを機能させるためには、デフォルトの引数のないコンストラクタを定義してから、__cinit__
コンストラクタから引数が入手できたら、オブジェクトを初期化するためにinit()
関数を追加する必要がありました。これにより、C++コードの複雑さが増しました。
これを行うにはよりクリーンで良い方法がありますか?私は必要に応じてポインタを避けたいですが、説得力のある議論で確信しているかもしれません。
移譲代入演算子は少し綺麗かもしれませんか?必要なコードの総量はかなり似ていますが、これはきれいなC++インターフェイスです。 – DavidW