Чтобы передать указатель на функцию-член
У меня есть класс с функциями экземпляра (или методы?). Внутри экземпляра я пытаюсь передать указатели на эти функции в библиотеку. Библиотека ожидает статические функции.
Когда я передаю свои указатели на функции обратного вызова, компилятор жалуется, что мои функции не являются статичными. Я пытался сделать их статичными, но если я это сделаю, то я не смогу получить доступ к полям экземпляра из функций.
Как я мог обойти это?
Подобный вопрос:Использование функции-члена класса C ++ в качестве функции обратного вызова C где предлагают ставить метод статично. Однако я не могу этого сделать, или я не вижу, как я мог.
CodeGlutController::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
}
Disclaimer : I just begun C++. I read all of Accelerated C++ and this is my first project to try out the language. My background is in Java.