我正在尝试用Cython将一个C++库封装到一个python API中。我想封装的类有以下模板:
template<typename Value>
class ClassToWrap
{
public:
typedef std::shared_ptr<std::vector<Value> > TypeToWrap;
ClassToWrap(TypeToWrap data)
{
}
}
我对C++标准库不太有信心。我如何在Cython中 Package TypeToWrap
,使其可以像数组或多维数组一样以简单的方式初始化,例如使用赋值循环?谢谢您的建议。
2条答案
按热度按时间sqougxex1#
假设您有一个C++头文件,如下所示:
你需要将这个类公开给cython,这是通过cython wrapping Cpp文档中的
cdef extern
完成的。注意你只需要定义函数,而不是它们的实现。
其次,我们定义一个cython类来 Package 它并将其暴露给python,因为python要使用它,所以它需要知道
T
的类型,我们假设它是一个int
:你可能想知道为什么要使用一个指向对象的指针?原因是你的对象没有默认的零参数构造函数,而cython需要一个默认的零参数构造函数来堆栈分配它,使用一个
__cinit__
和一个__dealloc__
保证没有内存泄漏注意,
some_list
不一定是python列表,它可以很容易地是numpy数组,事先知道类型可以帮助编译器优化它的代码,下面的代码可以测试它。ct3nt3jp2#
如果一个对象被删除了,你应该给予Python一个指针,并创建一个双向观察模式(通知双方)!并且你可以重置shared_ptr。例如: