
vicente.botet wrote:
In C++0x enuma have its own namespace. why not emulate this with namespace. There is a lot of enums in boost following this.
namespace grays { enum type { black, dark, gray, light...}; }
The declaration of a variable is a little bit artificial, ... grays::type v;
The enumeration follows the C++0x syntax. v= grays::back;
When moving to C++0x you could do a replacement of grays::type and declare it as before enum type { black, dark, gray, light...};
I've always found the following CRTP quite helpful in those cases: ---------------------------------------------------------------------- template<typename Derived, typename ValueType = int> class Enumeration { public: typedef ValueType value_type; public: value_type value() const { return m_Value; } friend bool operator<(Derived const& left, Derived const& right) { return (left.value() < right.value()); } friend bool operator==(Derived const& left, Derived const& right) { return (left.value() == right.value()); } friend bool operator!=(Derived const& left, Derived const& right) { return !(left == right); } friend bool operator<=(Derived const& left, Derived const& right) { return !(right < left); } friend bool operator>(Derived const& left, Derived const& right) { return (right < left); } friend bool operator>=(Derived const& left, Derived const& right) { return !(left < right); } protected: Enumeration(value_type const value) : m_Value(value) {} private: value_type m_Value; }; ---------------------------------------------------------------------- Which can the be used like this: ---------------------------------------------------------------------- struct Color : Enumeration<Color> { enum _Domain { red, green, blue }; // Intentionally non-explicit Color(_Domain const value) : Enumeration<Color>(value) {} }; void func(Color const color) { // ... } int main(int, char**) { Color myColor = Color::red; func(Color::blue); return 0; }; ---------------------------------------------------------------------- Best regards, Kimon