Swig:在 Python 中使用 C++ STL 复合体

Swig: using c++ STL complex in Python

我想在 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 一起使用?

std_complex.i 已经包含足够的定义来使用 std::complex<float>:

%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)