繁体   English   中英

如何在SWIG中将矢量的锯齿状C ++向量转换(typemap)到Python

[英]How to convert (typemap) a jagged C++ vector of vectors to Python in SWIG

用于将矢量返回类型的锯齿状C ++向量转换为Python列表的SWIG类型映射是什么?

std::vector<std::vector<int>>

在绑定.i文件中,输入以下typemap:

%typemap(out) std::vector<std::vector<int>>& 
{
    for(int i = 0; i < $1->size(); ++i)
    {       
        int subLength = $1->data()[i].size();
        npy_intp dims[] = { subLength };
        PyObject* temp = PyArray_SimpleNewFromData(1, dims, NPY_INT, $1->data()[i].data());
        $result = SWIG_Python_AppendOutput($result, temp);
    }       
}

SWIG中有内置支持,但它返回一个元组而不是列表。 但是,对您来说可能就足够了:

%module test

%{
    #include <vector>
%}

%include <std_vector.i>                      // built-in support
%template() std::vector<int>;                // declare instances of templates used to SWIG.
%template() std::vector<std::vector<int> >;

%inline %{                                   // Example code.
std::vector<std::vector<int> > func()
{
    std::vector<std::vector<int> > vv;
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    vv.push_back(v);
    v.clear();
    v.push_back(4);
    v.push_back(5);
    vv.push_back(v);
    return vv;
}
%}

结果:

>>> import test
>>> test.func()
((1, 2, 3), (4, 5))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM