Python Swig-自定义对象的向量作为返回参数 如果我有这样的C++函数…< /p>

Python Swig-自定义对象的向量作为返回参数 如果我有这样的C++函数…< /p>,python,vector,swig,Python,Vector,Swig,intmyfunc(inta,std::vector*b) 我的档案里有这个 %include "std_vector.i" namespace std { %template(vectormyobj) vector<MyObj>; } %apply std::vector*输出{std::vector*} 然后在python中我可以做到这一点 bout = mylib.vectormyobj() _ = mylib.myfunc(1,bout) %typemap(in,

intmyfunc(inta,std::vector*b)

我的档案里有这个

%include "std_vector.i"
namespace std {
    %template(vectormyobj) vector<MyObj>;
}
%apply std::vector*输出{std::vector*}

然后在python中我可以做到这一点

bout = mylib.vectormyobj()
_ = mylib.myfunc(1,bout)
%typemap(in,numinputs=0) std::vector<MyNamespace::MyProject::MyObj>* {
    // Create a persistent object to hold the result;
    $1 = new std::vector<MyNamespace::MyProject::MyObj>;
}
%typemap(argout) std::vector<MyNamespace::MyProject::MyObj>* (PyObject* tmp) {
    // Store the persistent object in a PyObject* that will be destroyed
    // when it goes out of scope.
    tmp = PyList_New($1->size());
    for(auto i = 0; i < $1->size(); ++i) {
        PyObject *junk;
        junk = SWIG_NewPointerObj((new MyNamespace::MyProject::MyObj((*$1)[i])), 
            SWIGTYPE_p_MyNamespace__MyProject__MyObj, 
            SWIG_POINTER_OWN);
        PyList_SET_ITEM(tmp, i, junk);
    }
    $result = SWIG_Python_AppendOutput($result, tmp);
}
\uuBout=mylib.myfunc(1)

而且,
bout
将是一个浮动列表,就像我想要的那样……耶

<>但是现在我想在C++中做这个……/P>
intmyfunc(inta,std::vector*b)

简单地做以下事情是行不通的

%apply std::vector*输出{std::vector*}

它在Python中为ma提供了错误的参数类型或数量错误。我找到了一个不太理想的方法,通过将此添加到我的.I文件中来实现它

%include "std_vector.i"
namespace std {
    %template(vectormyobj) vector<MyObj>;
}
在本例中,
bout
是我的自定义类型列表,一切都很好……除了我真的想把
bout
放在=的左侧,而不是作为参数传入。似乎我需要一些%typemap(in)和/或%typemap(argout)的Swig-fu来让它工作,但我一直无法让我的大脑围绕它


有人能提供指导吗?

我终于想出了如何使这项工作起作用

首先,为了与我的示例更相关,让我们假设MyObj实际上位于某些名称空间中,以便像
MyNamespace::MyProject::MyObj
一样访问它。所以要包装的函数看起来像

int myfunc(int a, std::vector<MyNamespace::MyProject::MyObj> *b);