C ++枚举名称重叠

时间:2014-10-19 16:10:57

标签: c++ c++11 enums

假设我有一个包含两个枚举的类。

    enum NameType { Defined, Inherited };
    enum ValueType { Defined, Inherited };

计算值在第二个枚举中被称为“先前已定义”,因为它们与第一个枚举具有相同的名称。是否有简洁的语法并允许这些名称?

我知道在C#中这不是问题,但在C ++中它似乎是。我正在使用C ++ 11。

3 个答案:

答案 0 :(得分:8)

由于您使用的是C ++ 11,我建议您使用enum class

enum class NameType { Defined, Inherited };
enum class ValueType { Defined, Inherited };

这解决了范围问题。

有关enum class的进一步讨论,请参阅http://www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html

答案 1 :(得分:1)

您也可以通过在所有枚举前添加枚举名称的缩写来解决此问题。这是有多少库处理这个问题。在你的情况下,这将是结果:

enum NameType { NT_Defined, NT_Inherited };
enum ValueType { VT_Defined, VT_Inherited };

答案 2 :(得分:1)

如果您没有C ++ 11编译器,则可以使用名称空间或类:

namespace Solar
{
   enum NameType { Defined, Inherited };
}

namespace Lunar
{
   enum ValueType { Defined, Inherited };
}

当然,如果使用using namespace,编译器可能会出现歧义错误。但是,只需使用完全限定名称即可轻松解决该错误。在类似的行上,您还可以在类的public区域中定义枚举。