나는 std :: list를 매개 변수로 반환하는 Python의 C++ 메소드를 호출하려고합니다. 내가 파이썬에서 함수를 호출 할 때SWIG C++ to Python : std :: list를 파이썬의 인자로 반환하기
%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++;
}
}
, 나는 C++ 코드에서 중단 할 수 있습니다 : 여기
void FindAllServices(int id, std::list<Service*> &services)
는 표준 : : 목록 내 타입 맵입니다 : 여기
는 C++ 프로토 타입입니다 모든 것이 괜찮은지 확인하십시오 (즉, 일부 서비스 포인터가 목록에 복사 됨). 그러나 파이썬에서 얻은 목록은 비어 있습니다.
내가 뭘 잘못하고 있는지 알겠습니까?
감사합니다.
Swig에는 일부 STL 클래스에 대한 미리 정의 된 typemaps가 있습니다. SWIG의'Lib/Python' 디렉토리를 보라. –