Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化C++;具有Cython构造函数参数的对象_C++_Constructor_Cython_Default Constructor - Fatal编程技术网

C++ 初始化C++;具有Cython构造函数参数的对象

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):

我在C++中实现了过滤器>代码>类,我正在用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 < /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++接口。另一种解决方案是只需要一个重载的构造函数。