У меня есть класс с функциями экземпляра (или методами? ). Из экземпляра я пытаюсь передать указатели на эти функции в библиотеку. Библиотека ожидает статические функции.
Когда я передаю свои указатели функциям обратного вызова, компилятор жалуется, что мои функции не являются статическими. Я попытался сделать их статическими, но если я это сделаю, то не смогу получить доступ к полям экземпляра из функций.
Как я мог обойти это?
Аналогичный вопрос:Использование функции-члена класса 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.