Aby przekazać wskaźnik do funkcji składowej

Mam klasę z funkcjami instancji (lub metodami?). Z poziomu instancji próbuję przekazać wskaźniki do tych funkcji do biblioteki. Biblioteka oczekuje funkcji statycznych.

Kiedy przekazuję moje wskaźniki do funkcji wywołania zwrotnego, kompilator skarży się, że moje funkcje nie są statyczne. Próbowałem umieścić je jako statyczne, ale jeśli to zrobię, nie mogę uzyskać dostępu do pól instancji z poziomu funkcji.

Jak mogłem to obejść?

Podobne pytanie brzmi:Używanie funkcji członka klasy C ++ jako funkcji zwrotnej C gdzie sugerują, aby umieścić metodę statyczną. Jednak nie mogę tego zrobić, albo nie wiem, jak mogłem.

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

Zastrzeżenie: Właśnie zacząłem C ++. Przeczytałem całą wersję Accelerated C ++ i jest to mój pierwszy projekt, który wypróbowuje język. Moje pochodzenie jest w Javie.

questionAnswers(4)

yourAnswerToTheQuestion