使用Cython构造函数中的参数初始化C ++对象

时间:2016-10-27 16:23:41

标签: c++ constructor cython default-constructor

我在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 ++代码增加了一些不必要的复杂性。

有更清洁或更好的方法吗?如果有必要,我想避免使用指针,但可能会用一个令人信服的论点来说服。

1 个答案:

答案 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)