Linux で VRPN クライアントを構築しました。これに基づいています: http://www.vrgeeks.org/vrpn/tutorial---use-vrpn
コードの一部を次に示します。
vrpn_Analog_Remote * analog = NULL;
vrpn_Button_Remote * button = NULL;
vrpn_Tracker_Remote * tracker = NULL;
// Things happen...
analog = new vrpn_Analog_Remote("pathToAnalog");
analog->register_change_handler(NULL, handleAnalog);
button = new vrpn_Button_Remote("pathToButton");
button->register_change_handler(NULL, handleButton);
tracker = new vrpn_Tracker_Remote("pathToTracker");
tracker->register_change_handler(NULL, handleTracker);
このコードで参照されているコールバックは次のとおりです。
void handleAnalog(void * userData, const vrpn_ANALOGCB a) {
// Do stuff...
}
void handleButton(void * userData, const vrpn_BUTTONCB b) {
// Do stuff...
}
void handleTracker(void * userData, const vrpn_TRACKERCB t) {
// Do stuff...
}
VRPN へのこれらすべての参照が定義されている場所は次のとおりです。
https://github.com/vrpn/vrpn/blob/master/vrpn_Analog.h#L168 https://github.com/vrpn/vrpn/blob/master/vrpn_Button.h#L225 https://github.com/ vrpn/vrpn/blob/master/vrpn_Tracker.h#L284
これらは Linux で警告なしにコンパイルされ、実際に使用できます。すべてが期待どおりに機能しました。ここにあるすべての型は、コンパイラー g++ を満たしているようです。
しかし、Windows では、Visual Studio 2015 を使用するか MinGW の g++ を使用するかに関係なく、最初の 2 つのコールバック登録で次のようになります。
invalid conversion from 'void (*)(void*, vrpn_ANALOGCB) {aka void (*)(void*, _vrpn_ANALOGCB)}' to 'vrpn_ANALOGCHANGEHANDLER {aka
void (__attribute__((__stdcall__)) *)(void*, _vrpn_ANALOGCB)}' [-fpermissive]
invalid conversion from 'void (*)(void*, vrpn_BUTTONCB) {aka void (*)(void*, _vrpn_BUTTONCB)}' to 'vrpn_BUTTONCHANGEHANDLER {aka
void (__attribute__((__stdcall__)) *)(void*, _vrpn_BUTTONCB)}' [-fpermissive]
そして最後のものについては、別のエラーが発生します。
call of overloaded 'register_change_handler(NULL, void (&)(void*, vrpn_TRACKERCB))' is
ambiguous
これを入力しているので、VRPN が Windows で別の方法でコンパイルされたのではないかと考えています。そのため、コンパイラでコードに問題が発生しています。しかし、私は何をすべきかについて非常に迷っています。