C++ 初始化C++;具有Cython构造函数参数的对象
我在C++中实现了C++ 初始化C++;具有Cython构造函数参数的对象,c++,constructor,cython,default-constructor,C++,Constructor,Cython,Default Constructor,我在C++中实现了过滤器>代码>类,我正在用Python来封装它。CythonMyFilter类当前看起来是这样的 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):
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 < /Cord>作为参数。但是为了使Cython包装器工作,我必须定义一个默认的无参数构造函数,然后添加一个
init()
函数,一旦参数从\uu cinit\uu
构造函数中可用,就初始化对象。这增加了一些不必要的复杂性,C++代码。
有没有更干净或更好的方法?如果有必要,我想避免使用指针,但可能会被一个令人信服的论点说服。事实上,您的解决方案是更干净更好的方式:) 另一种解决方案是添加一个重载构造函数,然后可以从init调用该构造函数:
cdef cppclass myclass:
myclass() except +
myclass(args) except +
然后添加到python类中
cdef class myPyClass:
cdef myclass pclass
def __cinit__(self,args):
pclass = new myclass(args)
移动分配操作符可能更整洁一些?所需的代码总量将非常相似,但它是一个更为简洁的C++接口。另一种解决方案是只需要一个重载的构造函数。