枚举“继承”重新定义问题

时间:2017-03-22 00:07:07

标签: c++ inheritance enums

给定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 
    };
};

Live Demo

这里发生的是EnumDeriv::One掩码(这是正确的术语吗?)Enum::One的定义。因此,EnumDeriv::One现在将映射到5的“意外”整数值。

如果我们从Enum派生并无意中重新定义了一些枚举器标识符,这可能会产生一些难以调试的错误。

任何有关如何将“屏蔽”转换为编译器错误的解决方案,或者对于没有这种潜在错误来源的类似优雅的“枚举继承”解决方案的建议都是受欢迎的。

0 个答案:

没有答案