使用来自 Cython 构造函数的参数初始化 C++ 对象
Initialize C++ object with arguments from Cython constructor
我已经在 C++ 中实现了 filter
class,我正在努力用 Cython 包装它以便在 Python 中使用。 Cython MyFilter
class 目前看起来像这样。
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++ class 有一个单独的构造函数,它将 std::vector<size_t>
作为参数。但是为了使 Cython 包装器工作,我必须定义一个默认的无参数构造函数,然后添加一个 init()
函数来在参数从 __cinit__
构造函数可用时初始化对象。这给 C++ 代码增加了一些不必要的复杂性。
是否有更清洁或更好的方法来做到这一点?如有必要,我想避免指点,但可能会被令人信服的论据说服。
实际上,您的解决方案是更清洁更好的方法:)
另一个解决方案是添加一个重载的构造函数,然后您可以从 init 调用它。:
cdef cppclass myclass:
myclass() except +
myclass(args) except +
然后添加到你的pythonclass
cdef class myPyClass:
cdef myclass pclass
def __cinit__(self,args):
pclass = new myclass(args)
我已经在 C++ 中实现了 filter
class,我正在努力用 Cython 包装它以便在 Python 中使用。 Cython MyFilter
class 目前看起来像这样。
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++ class 有一个单独的构造函数,它将 std::vector<size_t>
作为参数。但是为了使 Cython 包装器工作,我必须定义一个默认的无参数构造函数,然后添加一个 init()
函数来在参数从 __cinit__
构造函数可用时初始化对象。这给 C++ 代码增加了一些不必要的复杂性。
是否有更清洁或更好的方法来做到这一点?如有必要,我想避免指点,但可能会被令人信服的论据说服。
实际上,您的解决方案是更清洁更好的方法:)
另一个解决方案是添加一个重载的构造函数,然后您可以从 init 调用它。:
cdef cppclass myclass:
myclass() except +
myclass(args) except +
然后添加到你的pythonclass
cdef class myPyClass:
cdef myclass pclass
def __cinit__(self,args):
pclass = new myclass(args)