gpt4 book ai didi

c++ - 在使用 GLUT 时避免使用全局变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:29 26 4
gpt4 key购买 nike

GLUT 是一个很棒的 AP​​I,它非常易于使用,但我对它处理范围的方式有些困难。在定义回调时,没有传递参数的选项,所以在我看来,程序员似乎被迫依赖全局变量,我觉得这很难接受。现在我在它自己的模块中拥有所有 GLUT 代码,在它自己的线程上运行,并定义一个静态指针,我在模块的入口点分配它,如下所示:

主模块

int main( int argc, char** argv ) {
int foo;
boost::thread graphicsThread(glutMain, argc, argv, &foo);

//...

graphicsThread.join();
return 0;
}

GLUT 模块

static int* FOO_REF;

int glutMain( int argc, char** argv, int* foo ) {
FOO_REF = foo;
glutInit(&argc, argv);
//etc...

还有比这更好的解决方案吗?

最佳答案

如果您正在使用 freeglut 或衍生产品,并且愿意将自己局限于 freeglut 衍生产品,那么它有一个非标准的扩展来准确地解决问题。您可以将 void* 与每个窗口相关联。如果您将其设为包含所有您想要的每个窗口数据的结构,则可以完全避免使用全局变量。

概要:

#include <GL/glut.h>
#include <GL/freeglut_ext.h>


void * glutGetWindowData();
glutSetWindowData(void *data);

关于c++ - 在使用 GLUT 时避免使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052234/

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