python - 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 列表。
解决方案
推荐阅读
- python - 尝试查找文件中数字的平均值时,Python 的 int() 错误消息无效文字
- android - 如何将base64 Android保存到MySQL数据库?
- reactjs - 缺少 JSDoc @param "props.children" 类型。和缺少 JSDoc @param "props.children" 类型。使用 React Native 功能组件
- java - 如何在微调器下拉菜单上打开新活动单击
- reactjs - 我在哪里可以找到 react-bulma-components 的可用图标?
- python - 即使存在,也无法在 Selenium 中找到第二个元素
- c++ - 在对象中使用来自非对象 API 的函数的指针问题
- python - 如何使用我的 `ndarray` 在 matplotlib 中为以下几行设置动画?
- vba - VBA函数将多个变量传递回Sub
- python - ax.locator_params(nbins=k) 在 matplotlib 中不起作用