建议解决枚举歧义名称冲突?

时间:2012-07-11 19:18:41

标签: c++ enums namespaces

我在代码库中有一个类似于以下内容的库:

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?

2 个答案:

答案 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编译器,就应该使用它们。