いくつかのC++コード用のSWIG/Pythonバインディングをいくつか書いています。これはKinect Accidental APIと呼ばれています。私はモーターを持っており、機能はworkingです。 RGBと深度バッファを解析して取り込むListenerクラスへのコールバックはSWIGから呼び出されないようです。明らかにデータキャプチャスレッドが起動してCPUを起動しますが、コールバックからのデバッグ行は出力されません。データバッファにデータを格納し、Pythonから簡単にアクセスできるようにするにはどうすればよいでしょうか?ここでコールバック付き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) {};
};
は、仮想メソッドを持つリスナークラスで、Pythonのは、C++クラスのリスナーを継承するために使用され、このクラスのバージョンをラップすることができますか?私はC++で最小のリスナーを追加しました。残りの作業は、型マップを使って効率的に配列にアクセスすることです。現在、私はこの素朴なタイプマップを使用しています
%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