How do I 'ToString()' an enum in C++?
In Java and C# I would just call ToString.
enum Colours
{
Red =0,
Green=1,
Blue=2
};
I need to create a string like: "Invalid colour '" + colour + "' selected."
ToString(String)Converts the value of this instance to its equivalent string representation using the specified format.
We can convert an enum to string by calling the ToString() method of an Enum.
The Java Enum has two methods that retrieve that value of an enum constant, name() and toString().
The toString() method of Enum class returns the name of this enum constant, as the declaration contains. The toString() method can be overridden, although it's not essential.
While this is commonly done through switches, I prefer arrays:
#include <iostream>
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With