在Cython中包装C ++模板函数/方法

时间:2012-01-03 16:51:40

标签: c++ templates methods cython wrapping

我正在尝试使用Cython包装一些C ++代码。我有一个使用模板方法的类,但它本身不是模板。

class SomeClass {
    template <class T> SomeClass(T& spam);
};

由于该类不是模板而只是构造函数,因此我无法将此类声明为Cython中的模板。

# wrong!
cdef extern from "SomeClass.h":
    cppclass SomeClass [T]:
        SomeClass(T& spam)

如何包装模板方法?

3 个答案:

答案 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 ++库的一部分存在了