我正在使用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)
有没有人对如何进行有任何建议?
答案 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 examples和extension types。