在SWIG中为重载函数创建Typemap

时间:2018-01-12 16:37:13

标签: python swig typechecking

我正在使用SWIG将C ++程序转换为Python。由于我使用的是重载函数,因此我必须创建一个类型映射,具体来说,我必须对函数使用typechecks,以便它根据参数知道要使用哪个函数。 SWIG网站上几乎没有关于如何为vector <vector <string> >vector <vector <double> >或模型类型创建类型检查的文档。我访问了他们的GitHub page,它提供了一些矢量类型的文档,但它们似乎都与我的案例无关。

void foo(vector <vector <string> > &input, Model *myModel,vector <vector <vector <double> > > &output)


void foo(vector <vector <vector <FS> > > &input, Model *myModel,vector <vector <vector <double> > > &output)

有没有人对如何进行有任何建议?

1 个答案:

答案 0 :(得分:0)

我建议使用Cython而不是SWIG。

它专门用于编写Python本机代码扩展,C / C ++外部代码的映射非常容易编写。

对于上面的示例,可以编写Cython定义文件(.pxd):

cdef extern from "Foo.h":
    cppclass Model:
        pass
    void foo(vector[string], Model*, vector[vector[double]])
    void foo(vector[vector[FS]], Model*, vector[vector[vector[double]]], Model*)

然后,cimport文件中的Cython实现代码可以.pxd,并直接使用C ++函数。

有关实施代码示例,请参阅documentation for more C++ interfacing examplesextension types