假设我有一个头文件Snake.h:
#include "SnakeBodyPart.h"
#include "GUI.h"
//...
SnakeBodyPart.h是(除其他外):
#include "GUI.h"
class SnakeBodyPart {
private :
GUI::Orientation orientation;
}
最后GUI.h:
class GUI {
enum Orientation { NORTH, EAST, SOUTH, WEST };
}
现在在Snake.cpp中我想做以下事情:
void Snake::turn(){
if(bodyPart.getOrientation() == GUI::EAST){
//do something
else if (bodyPart.getOrientation() == GUI::SOUTH){
//do something
else if ...
}
我认为你明白了。我想知道的是:是否可以为单个方法设置命名空间?就像将命名空间GUI提供给Snake::turn
一样,我只需输入bodyPart.getOrientation() == EAST
?
我在Snake.cpp中有一些具有不同命名空间的枚举,并希望通过为某些方法提供某些名称空间来使代码更易读,而不仅仅是为Snake.cpp提供一个名称空间。这可能吗?
答案 0 :(得分:3)
请注意,在您的示例中,GUI
不是命名空间,而是类。
话虽如此,在turn()
内,您可以编写using namespace GUI;
来访问GUI
命名空间中的所有标识符,而无需明确限定它们。或者,您可以使用例如导入单个符号。 using GUI::EAST;
也是:
void Snake::turn(){
using namespace GUI;
if(bodyPart.getOrientation() == EAST){
//do something
else if (bodyPart.getOrientation() == SOUTH){
//do something
else if ...
}
答案 1 :(得分:1)
由于GUI
是一个类,所以只需清楚明确并键入GUI::
,这样每个阅读代码的人都知道正在发生的事情。你只需要一点额外的打字就可以编写一次代码,但人们可能需要多年阅读代码。
编辑:或者,如果GUI不需要成为类(仅enum
),请将其更改为命名空间并在函数中执行using namespace GUI;
。 / p>
答案 2 :(得分:1)
如果您想要的只是简短的人类可读代码而不是命名空间创建的实际分辨率,您可以使用typedef或宏来实现所需的结果。
或者,您不需要在类或命名空间中包含枚举,除非您担心命名冲突,在这种情况下包括标题足以能够创建Orientation变量或直接引用enum的定向成员