python - 元组由 swig 为 C++ vector 生成的 python 包装器返回

标签 python c++ swig

对于以下 C++ API:

std::vector<float> get_sweep_points()
{
    return program->sweep_points;
}

Swig 生成一个包装器,它返回一个元组 (),而不是一个列表 []。为什么?我如何强制 Swig 将列表返回给 python。

最佳答案

如果您使用 std_vector.i,您将获得由 std_vector.i 实现的类型映射。如果您不喜欢它,则必须编写自己的类型映射。

这是一个覆盖默认行为(无错误检查)并返回列表而不是元组的类型映射:

%typemap(out) std::vector<int> (PyObject* obj) %{
    obj = PyList_New($1.size());
    for(auto i = 0; i < $1.size(); ++i)
        PyList_SET_ITEM(obj, i, PyLong_FromLong($1[i]));
    $result = SWIG_Python_AppendOutput($result, obj);
%}

当然你也可以只做 v = list(get_sweep_points()) 现在它是一个列表 :^)

关于python - 元组由 swig 为 C++ vector 生成的 python 包装器返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960876/

相关文章:

python - 使用 selenium chrome 驱动时自动丢失元素 'Save as PDF'

c++ - 指针如何引用硬盘中的一个段

c++ - 哪个Qt库包含QApplication

c++ - 如果我们不想要模板/泛型中的任何数据类型怎么办

c++ - Octave 和痛饮。 mkoctfile 提示 : unrecognized argument

c# - C++ -> C# 使用 SWIG : how to use default constructor for a class

python - 按顺序插入嵌套列表

python - 尝试为 python 脚本创建 GUI 的挫败感

Python any() 方法结果

C++ - 模板类中带有模板化参数的模板静态方法