インスタンス関数 (またはメソッド?) を持つクラスがあります。インスタンス内から、これらの関数へのポインターをライブラリーに渡そうとします。ライブラリは静的関数を想定しています。
ポインタをコールバック関数に渡すと、コンパイラは関数が静的でないと文句を言います。静的にしようとしましたが、そうすると、関数内からインスタンス フィールドにアクセスできなくなります。
どうすればこれを回避できますか?
同様の質問は、メソッドを静的にすることを提案するCコールバック関数としてC++クラスメンバー関数を使用することです。しかし、私にはそれができないか、どうすればできるかわかりません。
コード
GlutController::GlutController (int argc, char **argv) {
// stuff ..
// Register callbacks
glutSpecialFunc( OnSpecialKeys ); // Error, need static functions
glutReshapeFunc( OnChangeSize ); // Error...
glutDisplayFunc( OnRenderScene ); // Error...
// stuff ..
}
GlutController::~GlutController() {
}
void GlutController::OnChangeSize(int aNewWidth, int aNewHeight){
glViewport(0,0,aNewWidth, aNewHeight);
mViewFrustrum.SetPerspective( APP_CAMERA_FOV, // If this function is
float( aNewWidth ) / float( aNewHeight ), // static, this won't
APP_CAMERA_NEAR, // work
APP_CAMERA_FAR );
mProjectionMatrixStack.LoadMatrix( // Same here
mViewFrustrum.GetProjectionMatrix() );
mTransformPipeline.SetMatrixStacks(mModelViewMatrixStack, // Same here
mProjectionMatrixStack);
}
void GlutController::OnRenderScene(void){
mGeometryContainer.draw(); // Won't work if static
}
void GlutController::OnSpecialKeys(int key, int x, int y){
mGeometryContainer.updateKeys(key); // Won't work if static
}
免責事項 : C++ を始めたばかりです。私は Accelerated C++ をすべて読みましたが、これはこの言語を試す最初のプロジェクトです。私のバックグラウンドは Java です。