メンバー関数をglutや他のライブラリに渡すのは簡単です。GLUTは関数ポインタを探しています。
Controllerを、glutKeyboardFuncに送信するメンバー関数OnKeyPressを持つクラスとします。あなたは最初に次のようなことを試みたくなるかもしれません
glutKeyboardFunc(&Controller::OnKeyPress);
ここでは、関数ポインターを渡しますが、そのクラスオブジェクトのメンバー関数を送信するため、これは正しくありません。C ++ 11では、新しいstd :: bindを使用できます。古いコンパイラを使用している場合は、boost::bindをお勧めします。いずれにせよ、構文はほぼ同じです。
using namespace std::placeholders; // for the _1, _2 placeholders
glutKeyboardFunc(std::bind(&Controller::OnKeyPress, &GLInput, _1, _2, _3));
ドキュメントから、glutKeyboardFuncには3つのパラメーターが必要であるように見えます。まず、オブジェクトのメンバー関数であるオブジェクトの最初の引数のメモリアドレスを修正してから、3つのプレースホルダーを指定します。
std :: bindを初めて使用する人にとっては奇妙に感じますが、Cでオブジェクト指向コードを実行したことがある人にとっては明らかです。この関数は実際には単なるC関数であり、クラスへの「this」ポインターが必要です。コールバックが単純な関数の場合、バインドは必要ありません。