gpt4 book ai didi

c++ - 将指针传递给成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:08 24 4
gpt4 key购买 nike

我有一个带有实例函数(或方法?)的类。在一个实例中,我尝试将指向这些函数的指针传递给一个库。该库需要静态函数。

当我将指针传递给回调函数时,编译器提示我的函数不是静态的。我试图让它们成为静态的,但如果这样做,我就无法从函数内部访问实例字段。

我该如何解决这个问题?

类似的问题是: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。

最佳答案

你想做的事是不可能的。这实际上是 glut 的错。

事情是这样的:

  • glut 想调用一个函数,但不给它数据,
  • 您希望您的函数使用一些数据,

这是相互冲突的需求。我相信 glut 决定了您可以安全地使用全局变量。

因此,一种解决方案是使用静态函数,使用静态数据。或者更好的解决方案是切换到 SDL .

关于c++ - 将指针传递给成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11792664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com