Better enumsThis tip submitted by Brent on 2012-08-13 14:24:22. It has been viewed 476 times.Rating of 0.0 with 0 votes Rather than having the enum constants at the same scope as the enum itself, it's possible to nest them similar to C#. Typical C++: enum directions { up, down }; directions myDirection = up; //up is in global scope Better: NAMED_VALUES_TYPE( directions, { up, down } ); directions myDirection = directions::up; //up is nested All you need is this gem: #define NAMED_VALUES_TYPE(type_name, ...) \ struct type_name \ { \ public: \ enum Values __VA_ARGS__ ; \ type_name() {} \ type_name(Values that) : value(that) { } \ Values operator =(Values that) { value = that; return that; } \ operator Values() const { return value; } \ bool operator ==(Values that) const { return value == that; } \ bool operator !=(Values that) const { return value != that; } \ bool operator ==(type_name that) const { return value == that.value; } \ bool operator !=(type_name that) const { return value != that.value; } \ private: \ Values value; \ } More tips Help your fellow programmers! Add a tip! |