Чтобы передать указатель на функцию-член

У меня есть класс с функциями экземпляра (или методами? ). Из экземпляра я пытаюсь передать указатели на эти функции в библиотеку. Библиотека ожидает статические функции.

Когда я передаю свои указатели функциям обратного вызова, компилятор жалуется, что мои функции не являются статическими. Я попытался сделать их статическими, но если я это сделаю, то не смогу получить доступ к полям экземпляра из функций.

Как я мог обойти это?

Аналогичный вопрос:Использование функции-члена класса 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.

5
задан Community 23 May 2017 в 12:29
поделиться