Skip to content

问题描述

pair<bool,size_t>模板声明了,但是接口调用会报错cannot unpack non-iterable SwigPyObject object

企业微信截图_17615554546936.png

企业微信截图_17615554626131.png

企业微信截图_17615555292624.png

报错:cannot unpack non-iterable SwigPyObject object

解决思路

size_t 可能在不同的命名空间中有不同的定义,尝试模板实例化修改为

%template(BoolSizeTPair) std::pair<bool, std::size_t>;

编译报错:

swig.i:221: Warning 490: Fragment 'SWIG_AsVal_std_size_t' not found.
swig.i:221: Warning 490: Fragment 'SWIG_From_std_size_t' not found.

参考链接 1:Missing definition for std::size_t when targeting Python? · Issue #1712 · swig/swig

image.png

参考链接 2:如何正确包装 std::vectorstd::size_t 与 Python 的 SWIG? std::size_t 的问题_python_Mangs-Python

解决方案

尝试如下所示为 swig 定义 size_t - http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn20

swig
%inline %{
typedef long unsigned int size_t;
%}

namespace std {
  %template(VecSize) vector<size_t>;
}

基于 VitePress 构建