我想從Python返回一個std :: list作爲參數的C++中調用一個方法。SWIG C++到Python:返回一個std :: list作爲參數給Python
這裏是C++原型:
void FindAllServices(int id, std::list<Service*> &services)
這裏是我的std ::列表類型映射:
%typemap(in) (std::list<Service*> &) (std::list<Service*> temp) {
$1 = &temp;
}
%typemap(argout) (std::list<Service*>&) {
Py_XDECREF($result); /* Blow away any previous result */
$result = PyList_New((*$1).size());
qList<Service*>::iterator it = (*$1).begin();
int i = 0;
while(it != (*$1).end()) {
PyList_SetItem($result,i,SWIG_NewPointerObj((void*)(*it), SWIGTYPE_p_Service, 0));
it++; i++;
}
}
當我打電話從Python的功能,我可以在C++代碼破裂,看到一切正常(即一些服務指針被複制到列表中)。但是,我在Python中獲得的列表是空的。
你知道我可能會做錯什麼嗎?
謝謝!
Swig爲某些STL類預定義了類型映射。請參閱SWIG的「Lib/Python」目錄。 – 2012-01-16 03:21:57