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

GLUT是一个很棒的API,它很容易使用,但我在处理范围方面遇到了一些困难.在定义回调时,没有传递参数的选项,所以在我看来好像程序员被迫依赖全局变量,我觉得很难接受.现在我将所有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语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...