----------
#define STRONG_ENUM(Name, ...) \ class Name { \ public: \ enum Name##_ { \ __VA_ARGS__ \ }; \ public: \ Name(Name::Name##_ v) : mValue(v) {} \ operator Name::Name##_() const { return mValue; } \ Name& operator=(Name::Name##_ v) { \ mValue = v; \ return *this; \ } \ private: \ Name::Name##_ mValue; \ }usage:
STRONG_ENUM(Color, Red, Green, Blue ); const char* tostring(Color c) { switch(c) { case Color::Red: return "red"; case Color::Green: return "green"; case Color::Blue: return "blue"; } } Color c = Color::Red; std::cout << tostring(c) << std::endl;
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.