所以我正在尝试制作一个 C++ / OpenGL 程序(使用 Visual Studio 2010),它使用一个名为 Operation 的类来处理键盘输入。关键是要学习一些东西,因为我是 C++ 和 OpenGL 的新手。
我正在使用数组'bool keysDown [256]'来存储按下了哪些键。同样,我想创建一个操作数组“Operation *keyOps[256]”来操作这些键。
我的问题来了,这些键中的大多数都没有操作,所以我想要一个完全不做任何事情的操作类,但我只需要一个不同文件可以使用的全局实例/指针。
现在我想做的是以某种方式创建这个“无操作”类的单个实例,并使其可用于包含此标头的任何文件,而无需在每个文件中声明它。(类似于 NULL,仅以 Operation 类的形式出现)
到目前为止,我的“解决方案”是使用这样的命名空间,
(操作.h)
#ifndef _OPERATION_H
#define _OPERATION_H
#include <iostream>
#include <GL\glut.h>
namespace operations{
class Operation{
protected:
std::string _name;
public:
Operation(std::string name) : _name(name){}
virtual void operate()=0;
std::string getName(){return _name;}
};
(...)
class OPnop: public Operation{
public:
OPnop(): Operation("No operation"){}
void operate(){}
};
static OPnop OPNOP;
Operation* nop(); //implemented in .cpp > {return &OPNOP;}
(...)
};
#endif
其他文件可以使用 operations::nop() 函数获得指向 OPNOP 实例的指针。我已经测试过并且可以正常工作,但是我不确定这在后台是否可以正常工作。
我一直在搜索全局变量的外部和静态用法,但我可能并不完全理解,也没有找到与我的问题相关的答案。如果我没记错的话,extern 变量也必须在其他文件中声明,而 static 为包括它在内的每个文件创建一个不同的变量。
所以我的问题是,有没有办法声明/实例化这个“无操作”,以便包括这个头的所有文件都可以直接访问同一个唯一实例而不必使用函数?