While this is commonly done through switches, I prefer arrays:
#include
namespace foo {
enum Colors { BLUE = 0, RED, GREEN, SIZE_OF_ENUM };
static const char* ColorNames[] = { "blue", "red", "green" };
// statically check that the size of ColorNames fits the number of Colors
static_assert(sizeof(foo::ColorNames)/sizeof(char*) == foo::SIZE_OF_ENUM
, "sizes dont match");
} // foo
int main()
{
std::cout << foo::ColorNames[foo::BLUE] << std::endl;
return 0;
}
The explicit array size has the benefit of generating a compile time
error should the size of the enum change and you forget to add the
appropriate string.
Alternatively, there is Boost.Enum in the Boost vault. The library
hasn't been officially released but is quite stable and provides what
you want. I wouldn't recommend it to a novice though.