Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // X-Macros used to keep an enumerated type aligned with
- // To- and From- String functions.
- #include <iostream>
- #include <string>
- #include <unordered_map>
- // List the enumerated values
- #define COLOURS \
- X(Red) \
- X(Orange) \
- X(Yellow) \
- X(Green) \
- X(Blue) \
- X(Indigo) \
- X(Violet)
- enum Colour
- {
- #define X(x) x,
- COLOURS
- #undef X
- };
- std::string ToString(Colour c)
- {
- switch(c)
- {
- #define X(x) case x: return #x;
- COLOURS
- #undef X
- };
- throw std::runtime_error("Unknown colour");
- }
- Colour FromString(std::string const & s)
- {
- static const std::unordered_map<std::string, Colour> lookup {
- #define X(x) {#x, x},
- COLOURS
- };
- return lookup.at(s);
- }
- int main()
- {
- Colour colour = FromString("Orange");
- std::cout << "My favourite colour is " << ToString(colour) << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement