Is there a simple way to convert C++ enum to string?

后端 未结 30 2245
我在风中等你
我在风中等你 2020-11-22 10:37

Suppose we have some named enums:

enum MyEnum {
      FOO,
      BAR = 0x50
};

What I googled for is a script (any language) that scans all

30条回答
  •  清酒与你
    2020-11-22 10:49

    X-macros are the best solution. Example:

    #include 
    
    enum Colours {
    #   define X(a) a,
    #   include "colours.def"
    #   undef X
        ColoursCount
    };
    
    char const* const colours_str[] = {
    #   define X(a) #a,
    #   include "colours.def"
    #   undef X
        0
    };
    
    std::ostream& operator<<(std::ostream& os, enum Colours c)
    {
        if (c >= ColoursCount || c < 0) return os << "???";
        return os << colours_str[c];
    }
    
    int main()
    {
        std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl;
    }
    

    colours.def:

    X(Red)
    X(Green)
    X(Blue)
    X(Cyan)
    X(Yellow)
    X(Magenta)
    

    However, I usually prefer the following method, so that it's possible to tweak the string a bit.

    #define X(a, b) a,
    #define X(a, b) b,
    
    X(Red, "red")
    X(Green, "green")
    // etc.
    

提交回复
热议问题