У С++ нет способа получить строковое представление перечисления. Люди обойти это, написав пользовательские функции, которые содержат много шаблонов кода, а также
switch
с case XYZ return "XYZ";
Это, конечно, требует, чтобы пользователи перечисления знали имя настраиваемой функции.
Поэтому я подумал, что могу просто добавить специализацию в std::to_string
, чтобы позволить пользователю использовать to_string
в моих перечислениях. Что-то вроде этого:
//
#include <iostream>
#include <string>
#include <cassert>
#define TEST
class Car
{
public:
enum class Color
{
Red,
Blue,
White
};
};
#ifdef TEST
#include <string>
namespace std
{
std::string to_string (Car::Color c)
{
switch (c)
{
case Car::Color::Red:
return "Red";
case Car::Color::Blue:
return "Blue";
case Car::Color::White:
return "White";
default:
{
assert(0);
return "";
}
}
}
}
#endif
int main()
{
std::cout << std::to_string(Car::Color::White) << std::endl;
}
Есть ли проблемы с этим решением?