How to Get enum item name from its value

后端 未结 10 978
天涯浪人
天涯浪人 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条回答
  •  萌比男神i
    2020-12-08 10:17

    If you know the actual enum labels correlated to their values, you can use containers and C++17's std::string_view to quickly access values and their string representations with the [ ] operator while tracking it yourself. std::string_view will only allocate memory when created. They can also be designated with static constexpr if you want them available at run-time for more performance savings. This little console app should be fairly fast.

    #include 
    #include 
    #include     
    int main() {
        enum class Weekdays { //default behavior starts at 0 and iterates by 1 per entry
            Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
        };
    
        static constexpr std::string_view Monday    = "Monday";
        static constexpr std::string_view Tuesday   = "Tuesday";
        static constexpr std::string_view Wednesday = "Wednesday";
        static constexpr std::string_view Thursday  = "Thursday";
        static constexpr std::string_view Friday    = "Friday";
        static constexpr std::string_view Saturday  = "Saturday";
        static constexpr std::string_view Sunday    = "Sunday";
        static constexpr std::string_view opener    = "enum[";
        static constexpr std::string_view closer    = "] is ";
        static constexpr std::string_view semi      = ":";
    
        std::pair Weekdays_List[] = {
            std::make_pair(Weekdays::Monday,    Monday),
            std::make_pair(Weekdays::Tuesday,   Tuesday),
            std::make_pair(Weekdays::Wednesday, Wednesday),
            std::make_pair(Weekdays::Thursday,  Thursday),
            std::make_pair(Weekdays::Friday,    Friday),
            std::make_pair(Weekdays::Saturday,  Saturday),
            std::make_pair(Weekdays::Sunday,    Sunday)
        };
    
        for (int i=0;i

    Output:

    enum[0] is Monday:0
    enum[1] is Tuesday:1
    enum[2] is Wednesday:2
    enum[3] is Thursday:3
    enum[4] is Friday:4
    enum[5] is Saturday:5
    enum[6] is Sunday:6
    

提交回复
热议问题