我在代码库中有一个类似于以下内容的库:
namespace rat {
...
enum myEnum {
BLUE,
RED
}
...
} //namespace rat
稍后我尝试使用该库在代码库中编译应用程序,当我使用命名空间rat(代码库主命名空间)说BLUE可能是rat::myEnum
{{1来自我不熟悉(并且不是我的)的其他文件中的rat::BLUE
rat::enums::Freq
,其中有一个枚举Freq,在名称空间鼠标中的名称空间枚举中有一个名为BLUE的人... < / p>
用户代码中有没有办法说出我现在想要哪一个?或者我必须在名称命名空间mylib中嵌套mylibs枚举,然后说rat :: enums :: BLUE或rat :: mylib :: BLUE?
答案 0 :(得分:5)
枚举常量的完整明确名称将为::rat::BLUE
,::rat::enums::BLUE
等。
请记住,表达式开头的::
代表全局命名空间。
答案 1 :(得分:4)
我通常在C ++ 03(前C ++ 11!)中做的是将enum
嵌套在struct
中,这样它们就不会漏掉:
namespace rat {
struct myEnum {
enum Enum {
blue, red
};
};
}
您必须将变量定义为rat::myEnum::Enum
,将值定义为rat::myEnum::blue
,但通常myEnum
应该像Color
一样有意义,因此命名不是多余的。< / p>
这在某种程度上模拟了C ++ 11 class enum
,因此如果您有权访问C ++ 11编译器,就应该使用它们。