gpt4 book ai didi

c++ - 来自对象的 freeglut 中的回调函数

转载 作者:可可西里 更新时间:2023-11-01 17:35:53 27 4
gpt4 key购买 nike

我正在使用 MSVC++ 和 freeglut 来使用 openGL。现在,我有一个名为 Camera 的类,它非常简单,但它还具有重新调整窗口形状的功能。

我的问题是:如何将 glutReshapeFunc(void (*callback)(int,int)) 设置为我相机中的函数?

由于编译器错误,我有以下代码无法运行:

int main(int argc, char **argv)
{
Camera *camera = new Camera();
glutReshapeFunc(camera->ReshapeCamera);
}

我的 Camera 类在 Camera.h 中看起来像这样:

class Camera
{
public:
Camera(void);
~Camera(void);
void ReshapeCamera(int width, int height);
};

也许这只是一个更一般的回调问题,但我在互联网上找到的唯一东西是围绕回调创建一些包装类。但看起来这不应该这么难。提前致谢。

最佳答案

没有干净的方法可以做到这一点。 C 不了解对象,因此指向成员的指针不起作用。 C 不做模板,所以仿函数不起作用。 API 甚至不允许您将任意 void *userData 传递给您的回调,因此您也不能以这种方式传递对象。

所以,实际上,您必须创建一个不是成员函数的包装函数,并且您必须通过静态和/或全局变量。

如果可以有多个对象监听此事件,您可以创建一个允许您注册任意监听器的单例类。

关于c++ - 来自对象的 freeglut 中的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5008266/

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