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

Wrapping C++ template function/method in Cython

本文关键字:函数 方法 c++ Cython 包装      更新时间:2023-10-16

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

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

由于类不是模板,而只是构造函数,所以我不能像这样在Cython中将类声明为模板。

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

如何包装模板方法?

对于非构造函数模板方法,使用以下非模板类:

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

我能让这个工作:

cdef extern from "someclass.h":
    cppclass SomeClass:
        void other[T](T &spam)

如果您特别需要构造函数模板方法,那么这可能没有帮助,但是从最初提出这个问题以来,Cython对模板方法的支持至少有了一些改进。

简单。(或者我认为它是)在c++类中,成员是模板化的,而在Cython中,您声明要模板化的类。将代码更改为:

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

如果可行,或到:

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

如果Cython支持

我不是一个cython专家,所以我可能是错的。

如何为cython的Boost包装?

http://www.boost.org/doc/libs/1_54_0/libs/python/doc/index.html

欢迎来到Boost的第2版。Python,一个c++库,可以实现c++和Python编程语言之间的无缝互操作性。新版本已经从头开始重写,具有更方便和灵活的界面,以及许多新功能,包括支持:引用和指针全局注册类型强制值自动跨模块类型转换高效函数重载c++到Python的异常转换默认参数关键字参数在c++中操作Python对象将c++迭代器导出为Python迭代器文档字符串

我猜你正在寻找这样的东西,它已经作为boost c++库的一部分存在了