首页 > 解决方案 > SWIG c++ 向量类型映射到 python 列表

问题描述

我在将 C++ std::vector 类型映射到 Python 列表中是半成功的。

这是我的 .i 文件

%module swigstvo
%include "std_vector.i"

%typemap(out) std::vector<int>*
{
  $result = PyList_New(3);
}

namespace std 
{
   %template(vectori) vector<int>;
};

当我调用这个非常简单的Python代码时

from swigstvo import vectori
value = vectori()
print(value)

我得到这样的输出: <swigstvo.vectori; [, , ] > 的代理,这正是我所期望的。但是,如果我尝试做这样的事情:

value.push_back(123) # or value.append(123)

我收到错误:TypeError:在方法“vectori_append”中,类型为“std::vector< int > *”的参数 1。

如果我从 .i 文件中删除 typemap 指令,一切正常。

我实际上在尝试什么 - 我想使用 SWIG “包装” stl 向量,但是每当我在 Python 中获得向量的实例时,我希望它具有 Python 列表的 API,或者至少被深度复制到列表中。

因此,具有此签名的 C++ 中的函数

std::vector<int> make_vector();

实际上会返回一个 Python 列表。

标签: pythonc++swigtypemapsswig-typemap

解决方案


推荐阅读