【发布时间】:2012-08-01 07:43:14
【问题描述】:
我有一个带有实例函数(或方法?)的类。在一个实例中,我尝试将指向这些函数的指针传递给一个库。该库需要静态函数。
当我将指针传递给回调函数时,编译器会抱怨我的函数不是静态的。我试图将它们设为静态,但如果这样做,我将无法从函数中访问实例字段。
我该如何解决这个问题?
类似的问题是:Using a C++ class member function as a C callback function 他们建议将方法静态化。但是我不能这样做,或者我不知道我怎么能这样做。
代码
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。
【问题讨论】:
标签: c++ function-pointers glut member-function-pointers freeglut