일부 C++ 코드에 대한 SWIG/Python 바인딩을 작성 중입니다. 이것은 Kinect Accidental API라고 불리는 것입니다. 저는 모터와 led 기능이 있습니다. working. RGB 및 깊이 버퍼를 구문 분석하고 채우는 Listener 클래스에 대한 콜백은 SWIG에서 호출되지 않는 것 같습니다. 데이터 캡처 스레드가 분명히 시작되어 CPU를 호깅하기 시작하지만 콜백의 디버그 라인은 나오지 않습니다. 데이터 버퍼를 채우고 파이썬에서 쉽게 액세스 할 수있는 방법은 무엇입니까? 여기 콜백 SWIG C++ 바인딩
class KinectListener
{
public:
virtual ~KinectListener(){};
virtual void KinectDisconnected(Kinect *K) {};
virtual void DepthReceived(Kinect *K) {};
virtual void ColorReceived(Kinect *K) {};
virtual void AudioReceived(Kinect *K) {};
};
는 파이썬이 클래스의 버전은 C++ 클래스의 청취자를 상속하는 데 사용할 수 싸서 수, 가상 방법에 리스너 클래스입니다? C++에서 최소한의 리스너를 추가 했으므로 나머지 작업은 typemap을 사용하여 효율적으로 배열에 액세스하는 것입니다. 현재이 순진한 typemap을 사용하고 있습니다
%typemap(out) unsigned short [ANY] {
int i;
$result = PyList_New($1_dim0);
for (i = 0; i < $1_dim0; i++) {
PyObject *o = PyInt_FromLong((long)$1[i]);
PyList_SetItem($result,i,o);
}
}
더 나은 옵션은 있습니까?
동일한 질문이있었습니다. N0vember의 답변이 이에 대한 답입니다. 호출 할 함수의 포인터를받는 대신 호출 할 함수의 이름을 알고있는 다형 클래스에 대한 포인터를받습니다. – Jonathan