我已經在C++中實現了一個filter
類,並且我正在使用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包裝工作,我必須定義一個默認的無參數構造函數,然後添加一個init()
函數來初始化該對象,一旦參數可從__cinit__
構造函數中獲得。這給C++代碼增加了一些不必要的複雜性。
是否有更乾淨或更好的方法來做到這一點?如果有必要,我想避免使用指針,但可能會引起強烈的爭論。
移動賦值運算符可能有點整齊?所需的代碼總量非常相似,但它是一個更加整潔的C++接口。 – DavidW