我在C ++中实现了一个filter
类,我正在使用Cython将其包装在Python中。 Cython MyFilter
类目前看起来像这样。
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 ++代码增加了一些不必要的复杂性。
有更清洁或更好的方法吗?如果有必要,我想避免使用指针,但可能会用一个令人信服的论点来说服。
答案 0 :(得分:0)
实际上,您的解决方案是更清洁的更好方式:)
另一个解决方案是添加一个重载的构造函数,然后可以从init。:
调用cdef cppclass myclass:
myclass() except +
myclass(args) except +
然后添加到你的python类
cdef class myPyClass:
cdef myclass pclass
def __cinit__(self,args):
pclass = new myclass(args)