Accessing to enum values by '::' in C++
c++, enums
Solution
In current C++ (i.e. C++11 and beyond), you can already access enum values like that:
enum Color { Red };
Color c = Color::Red;
Color d = Red;
You can go further and enforce the use of this notation:
enum class Color { Red };
Color c = Color::Red;
// Color d = Red; <-- error now
And on a sidenote, you now define the underlying type, which was previously only possible with hacky code (`FORCEDWORD` or so anyone?):
enum class Color : char { Red };
Problem
I have class like following: ``` class Car { public: Car(); // Some functions and members and <b>enums</b> enum Color { Red, Blue, Black }; Color getColor(); void setColor(Color); private: Color myColor; } ``` I want to: - access to `Color` values as `Color::Red`. It is really hardly to understand code when `Car::Red` is used, when class have a lot enums, subclasses etc. - use type `Color` as function argument or return value - use variable type `Color` in `switch` I know 3 partial solutions: - Using embedded class `Color` and enum in it - Using embedded namespace `Color` and enum in it - Using `enum class` 1 and 2 solutions solves a `Color::Red` accession problem, but I can't use functions like `Color getColor()` and `void setColor(Color)`. 3 solution has a problem: VS2010 doen't support `enum class`. GCC v.4.1.2 doesn't support it too. I don't know about later versions of gcc. Yes, I'm working on cross-platform project. I have found this solution, but it seems ... heavy. I hope somebody can help me here :)