[Kinectプログラミング]C++でクラス化
OpenNI+NITEとOpenCVの環境で、
C++を使ってKinectプログラミングに取り組んでいます。
Visual C++を使っています。
キネクトハッカーズマニュアルという書籍を使っているのですが、
その中のソースコードは全て一つのクラスファイルに記述されているので、
これをクラス化出来ないものかと試行錯誤しています。
http://hagino3000.github.com/kinectbook/
こちらのサイトにソースコードが公開されています。
これの、8_1_detect_gestureというものです。
おおまかな構成は、
コールバック関数の宣言が前半になされていて、
後半にmain関数の処理が書いてある、
といった感じなんですが、
このコールバックに関する記述を、
CallBacks.cppというファイルを作って、
そっちにとりあえず全てコピペしてみました。
そしてCallBacks.hも作成して、
例えばスワイプ検出時のコールバックに関しては、
void XN_CALLBACK_TYPE Swipe (XnFloat fVelocity, XnFloat fAngle, void *pUserCxt);
とプロトタイプ宣言を記述しました。
ところが、
main関数内で実際にコールバックを呼び出している部分で、
XnCallbackHandle swipeRightCallback =
swipeDetector.RegisterSwipeRight((void*)"Right", Swipe);
ともともと書かれていたところを
XnCallbackHandle swipeRightCallback =
swipeDetector.RegisterSwipeRight((void*)"Right", CallBacks::Swipe);
と書き換えただけでは、
型"void(_stdcall CallBacks::*)(XnFloat fVelocity, XnFloat fAngle, void *pUserCxt)"の引数は、
型"XnSwipeDetector::SwipeCB"のパラメーターとの互換性が有りません。
というエラーになります。
そこでSwipeCBについて調べてみると、
http://eris.liralab.it/chris/dox/html/classXnVSwipeDetector.html
このページなどに記述がありますが、
SwipeCBの引数は(XnFloat fVelocity, XnFloat fAngle, void *pUserCxt)そのものなのです。
変換がうまく行っていないということだとおもうのですが、
どうすれば良いのでしょうか?
かなり限定的な質問になってしまって申し訳ありません。
なにか至らない点ありましたらご指摘ください。
お礼
なにか先生みたいになっちゃって、非常にお世話になっています。 おかげで、良く分かりました。 というわけでこの問題については幕を閉じます。 たぶん、まだまだ未熟者ですので何回も質問することあると思いますが、そのときはよろしくお願いします。 影の先生さん!どうもありがとうございました。