我正在尝试使用Cython包装一些C ++代码。我有一个使用模板方法的类,但它本身不是模板。
class SomeClass {
template <class T> SomeClass(T& spam);
};
由于该类不是模板而只是构造函数,因此我无法将此类声明为Cython中的模板。
# wrong!
cdef extern from "SomeClass.h":
cppclass SomeClass [T]:
SomeClass(T& spam)
答案 0 :(得分:0)
易。 (或者我认为是)在C ++类中,成员是模板化的,而在Cython中,您声明该类是模板化的。将您的代码更改为:
template <class T>
class SomeClass {
SomeClass(T& spam);
};
如果可行,或者:
cdef extern from "SomeClass.h":
cppclass SomeClass:
SomeClass [T](T& spam)
如果Cython支持它。
我不是一名cython专家,所以我可能错了。
答案 1 :(得分:0)
对于非构造函数模板方法,使用以下非模板类:
class SomeClass {
template <class T> void other(T& spam);
};
我能够让这个工作:
cdef extern from "someclass.h":
cppclass SomeClass:
void other[T](T &spam)
如果您特别需要构造函数模板方法,那可能无法帮助您,但看起来Cython对模板方法的支持从最初询问此问题的时间起至少略有改进。
答案 2 :(得分:-1)
如何为cython提升包装?
http://www.boost.org/doc/libs/1_54_0/libs/python/doc/index.html
欢迎使用Boost.Python的第2版,这是一个C ++库,可实现C ++与Python编程语言之间的无缝互操作。新版本已经从头开始重写,具有更方便灵活的界面和许多新功能,包括支持: 参考文献和指针 全球注册类型强制 自动跨模块类型转换 高效的函数重载 C ++到Python异常翻译 默认参数 关键字参数 在C ++中操作Python对象 将C ++迭代器导出为Python迭代器 文档字符串
我猜你正在寻找类似这样的东西,它已经作为boost c ++库的一部分存在了