假设我有一个包含两个枚举的类。
enum NameType { Defined, Inherited };
enum ValueType { Defined, Inherited };
计算值在第二个枚举中被称为“先前已定义”,因为它们与第一个枚举具有相同的名称。是否有简洁的语法并允许这些名称?
我知道在C#中这不是问题,但在C ++中它似乎是。我正在使用C ++ 11。
答案 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
区域中定义枚举。