我已经在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