我有一个带有实例函数(或方法?)的类。在一个实例中,我尝试将指向这些函数的指针传递给库。该库需要静态函数。
当我将指针传递给回调函数时,编译器抱怨我的函数不是静态的。我试图将它们设为静态,但如果我这样做,那么我将无法从函数中访问实例字段。
我怎么能绕过这个?
类似的问题是:使用 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。