Я реализовал класс filter
в C++, и я работаю над его переносом с помощью Cython для использования в Python. Класс Cython MyFilter
в настоящее время выглядит следующим образом.Инициализировать объект C++ с аргументами из конструктора Cython
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++.
Есть ли более чистый или лучший способ сделать это? Я хотел бы избежать указателей, если это необходимо, но может быть убежден с убедительным аргументом.
Оператор присваивания может быть немного опрятным? Общий объем необходимого кода был бы очень похож, но это более простой интерфейс C++. – DavidW