How to Get enum item name from its value

后端 未结 10 990
天涯浪人
天涯浪人 2020-12-08 09:56

I declared a enum type as this,

enum WeekEnum
{
Mon = 0;
Tue = 1;
Wed = 2;
Thu = 3;
Fri = 4;
Sat = 5;
Sun = 6;
};

How can I get the item na

10条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-08 10:26

    Here is another neat trick to define enum using X Macro:

    #include 
    
    #define WEEK_DAYS \
    X(MON, "Monday", true) \
    X(TUE, "Tuesday", true) \
    X(WED, "Wednesday", true) \
    X(THU, "Thursday", true) \
    X(FRI, "Friday", true) \
    X(SAT, "Saturday", false) \
    X(SUN, "Sunday", false)
    
    #define X(day, name, workday) day,
    enum WeekDay : size_t
    {
        WEEK_DAYS
    };
    #undef X
    
    #define X(day, name, workday) name,
    char const *weekday_name[] =
    {
        WEEK_DAYS
    };
    #undef X
    
    #define X(day, name, workday) workday,
    bool weekday_workday[]
    {
        WEEK_DAYS
    };
    #undef X
    
    int main()
    {
        std::cout << "Enum value: " << WeekDay::THU << std::endl;
        std::cout << "Name string: " << weekday_name[WeekDay::THU] << std::endl;
        std::cout << std::boolalpha << "Work day: " << weekday_workday[WeekDay::THU] << std::endl;
    
        WeekDay wd = SUN;
        std::cout << "Enum value: " << wd << std::endl;
        std::cout << "Name string: " << weekday_name[wd] << std::endl;
        std::cout << std::boolalpha << "Work day: " << weekday_workday[wd] << std::endl;
    
        return 0;
    }
    

    Live Demo: https://ideone.com/bPAVTM

    Outputs:

    Enum value: 3
    Name string: Thursday
    Work day: true
    Enum value: 6
    Name string: Sunday
    Work day: false
    

提交回复
热议问题