给定this popular solution“枚举继承”(可能更好地称为“扩展”),如果我在派生类中重新定义基类的枚举器标识符,是否可能引发编译器错误?
示例:
struct Enum
{
enum
{
One = 1,
Two,
_last
};
};
struct EnumDeriv : Enum
{
enum
{
Three = Enum::_last,
Four,
One //<--- this compiles but I'd like to get a compiler error instead
};
};
这里发生的是EnumDeriv::One
掩码(这是正确的术语吗?)Enum::One
的定义。因此,EnumDeriv::One
现在将映射到5
的“意外”整数值。
如果我们从Enum
派生并无意中重新定义了一些枚举器标识符,这可能会产生一些难以调试的错误。
任何有关如何将“屏蔽”转换为编译器错误的解决方案,或者对于没有这种潜在错误来源的类似优雅的“枚举继承”解决方案的建议都是受欢迎的。