Extending enums in C++?

前端 未结 10 1100
挽巷
挽巷 2020-11-29 05:08

Is there a way in C++ to extend/\"inherit\" enums?

I.E:

enum Enum {A,B,C};
enum EnumEx : public Enum {D,E,F};

or at least define a

10条回答
  •  执笔经年
    2020-11-29 05:23

    Actually you can extend enums in a round about way.

    The C++ standard defines the valid enum values to be all the valid values of the underlying type so the following is valid C++ (11+). Its not Undefined Behaviour, but it is very nasty - you have been warned.

    #include 
    
        enum Test1:unit8_t {
            Value1 =0,
            Value2 =1
        };
    
        constexpr auto Value3 = static_cast(3);
        constexpr auto Value4 = static_cast(4);
        constexpr auto Value5 = static_cast(5);
    
    
    Test1 fn(Test1 val){
      switch(val){
        case Value1:
        case Value2:
        case Value3:
        case Value4:
           return Value1;
        case Value5:
           return Value5; 
      } 
    }
    
    int main(){
      return static_cast(fn(Value5));
    } 
    

    Note that most of the compilers don't consider the additional values as part of the set for generating warnings about missing enums values in switch statements.So clang and gcc will warn if Value2 is missing but will do nothing if Value4 is missing in the above switch statement.

提交回复
热议问题