Para pasar un puntero a una función miembro
Tengo una clase con funciones de instancia (¿o métodos?). Desde dentro de una instancia, trato de pasar punteros a esas funciones a una biblioteca. La biblioteca espera funciones estáticas.
Cuando paso mis punteros a las funciones de devolución de llamada, el compilador se queja de que mis funciones no son estáticas. Traté de ponerlos en estado estático, pero si lo hago, entonces no puedo acceder a los campos de instancia desde dentro de las funciones.
¿Cómo podría solucionar esto?
Una pregunta similar es:Usando una función miembro de la clase C ++ como una función de devolución de llamada C Donde se sugiere poner el método estático. Sin embargo, no puedo hacer eso, o no veo cómo podría.
CódigoGlutController::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
}
Descargo de responsabilidad: acabo de comenzar C ++. Leí todo Accelerated C ++ y este es mi primer proyecto para probar el idioma. Mi formación es en Java.