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.
KodGlutController::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.