在 swig 上包装返回向量<T>

Posted

技术标签:

【中文标题】在 swig 上包装返回向量<T>【英文标题】:Wrapping return vector<T> on swig 【发布时间】:2017-09-12 15:38:56 【问题描述】:

我有一个 C++ 库,其中一些类具有返回 std::vector&lt;T&gt; 的方法,其中 T 是库的自定义类。有没有办法将此输出包装到 python 列表中?

问候。

【问题讨论】:

【参考方案1】:

是的,这当然是可能的。

C++ 类将有其公共接口wrapped by SWIG。

SWIG 有 typemaps 代表 std::vector,可以这样使用:

%include "typemaps.i"
%include "std_vector.i"
% 
#include "MyClass.h"
%

%template(MyVector) std::vector<MyClass>;

【讨论】:

我正在按照你的建议做,但在 Python 中作为上述方法的返回,我看到以下内容: *' at 0x7fba76e1d570 >swig/python 检测到 'std::vector *' 类型的内存泄漏,没有找到析构函数。我错过了什么吗? 好的。上面的错误是由 .i 文件的格式错误引起的。尽管如此,我不得不写出实际的类型映射以恢复 python 上的列表(实际上返回的对象不是 python 列表,它们是“MyVector”类型的对象,它们的行为几乎与列表一样)。我将发布完整的解决方案。谢谢。

以上是关于在 swig 上包装返回向量<T>的主要内容,如果未能解决你的问题,请参考以下文章

Swig:返回向量的接口简单 C++ 类

从 SWIG 绑定中迭代返回的向量<pair<int,int>>

SWIG:返回原始指针与共享 ptrs 的向量

返回一个已知大小的向量而不需要额外的包装器?

包装 std::vector 的 std::vectors,C++ SWIG Python

我有一个 SWIG 包装的向量。我怎么知道它包含哪种类型?