So übergeben Sie einen Zeiger an eine Mitgliedsfunktion

Ich habe eine Klasse mit Instanzfunktionen (oder Methoden?). Innerhalb einer Instanz versuche ich, Zeiger auf diese Funktionen an eine Bibliothek zu übergeben. Die Bibliothek erwartet statische Funktionen.

Wenn ich meine Zeiger an die Rückruffunktionen übergebe, beschwert sich der Compiler, dass meine Funktionen nicht statisch sind. Ich habe versucht, sie statisch zu machen, aber wenn ich das tue, kann ich nicht über die Funktionen auf die Instanzfelder zugreifen.

Wie könnte ich das umgehen?

Eine ähnliche Frage ist:Verwenden einer C ++ - Klassenmitgliedsfunktion als C-Rückruffunktion wo sie vorschlagen, die Methode statisch zu setzen. Das kann ich aber nicht, oder ich sehe nicht, wie ich es könnte.

Code
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
}

Haftungsausschluss: Ich habe gerade mit C ++ begonnen. Ich habe alles von Accelerated C ++ gelesen und dies ist mein erstes Projekt, in dem ich die Sprache ausprobiert habe. Mein Hintergrund ist in Java.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage