【问题标题】:Creating Typemap for Overloaded Function in SWIG在 SWIG 中为重载函数创建类型映射
【发布时间】:2018-01-13 00:51:14
【问题描述】:

我正在使用 SWIG 将 C++ 程序转换为 Python。由于我使用的是重载函数,我必须创建一个类型映射,特别是,我必须对函数使用类型检查,以便它知道根据参数使用哪个函数。 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)

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

【问题讨论】:

    标签: python swig typechecking


    【解决方案1】:

    我建议使用 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*)
    

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

    有关实现代码示例,请参阅documentation for more C++ interfacing examples 和extension types。

    【讨论】:

    • Cython 不是与最初用 Python 编写的代码一起使用吗?我的代码最初是用 C++ 编写的,我正在尝试使用它来实现 Python 性能,以便能够导入模块。
    • @lucy - 不,Cython 是一种用于为 Python 编写本机代码扩展的扩展语言。根据上面的示例,其主要功能之一是与外部 C/C++(和 fortran)代码集成。这正是您的用例。
    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多