所以我正在嘗試使用名爲Operation的類來處理鍵盤輸入的C++/OpenGL程序(使用Visual Studio 2010)。關鍵是要學習一些東西,因爲我對C++和OpenGL都很陌生。由不同文件共享的C++全局指針
我正在使用數組'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的用法,但我可能不明白這一切,我沒有找到一個答案,我可以與我的問題。如果我沒有弄錯外部變量也必須在其他文件中聲明,而靜態爲每個文件包括它創建一個不同的變量。
所以我的問題是,是否有申報/實例化這個「不操作」,讓所有包含該頭文件將有機會獲得相同的唯一實例都可以直接而無需使用功能的方法嗎?
注意您的包括防護件'_OPERATION_H'使用以下劃線後跟大寫字母[保留標識符(http://stackoverflow.com/q/228783/283302)。 – 2013-03-28 20:49:22