Swig:在 Python 中使用 c++ STL 复杂

Posted

技术标签:

【中文标题】Swig:在 Python 中使用 c++ STL 复杂【英文标题】:Swig: using c++ STL complex in Python 【发布时间】:2018-06-22 06:34:26 【问题描述】:

我想在 python 中使用 c++ 复杂类型。我尝试了以下 Swig 接口文件:

%module example
%include <std_complex.i>
%template(complexf) std::complex<float>;

它返回了这个错误:

example.i:3: Error: Template 'complex' undefined.

如果我手动包含 c++ 头文件,

%module example
%include <std_complex.i>

%include "/usr/include/c++/7/complex"
%template(complexf) std::complex<float>;

我会得到另一个错误:

/usr/include/c++/7/complex:50: Error: Syntax error in input(1).

所以我想知道如何正确使用 c++ complex 和 SWIG?

【问题讨论】:

【参考方案1】:

std_complex.i 已经包含足够的定义来使用std::complex&lt;float&gt;

%module example
%include <std_complex.i>

%inline %
using complexf = std::complex<float>;
complexf func(complexf a, complexf b)

    return a + b;

%

用法(用VS2015编译):

>>> import example
>>> example.func(1+2j,3-4j)
(4-2j)

【讨论】:

谢谢!我很感激。

以上是关于Swig:在 Python 中使用 c++ STL 复杂的主要内容,如果未能解决你的问题,请参考以下文章

SWIG c++ 到 python:向量问题

SWIG:你能否使用 SWIG 专门使用 C++ 头文件使 C++ 在 Python 中可用?

无法使用 SWIG 在 Python 中实例化 C++ 类(获取属性错误)

如何使用 Python 列表在 C++ 中使用 SWIG 分配 std::vector?

如何使用 SWIG 在 C++ 中调用 python 函数?

使用 SWIG 在 Python 中访问 C++ typedef