私はPythonから、std :: listをパラメータとして返すC++のメソッドを呼び出そうとしています。ここでSWIG C++ to Python:Pythonの引数としてstd :: listを返す
は、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'ディレクトリを参照してください。 –