如何从枚举类型中获取std :: string?

qua*_*ant 0 c++ enums c++11

我有一些错误代码,我想表示为字符串:

enum class ErrorCode
{
    OK,
    InvalidInput,
    BadAlloc,
    Other
};
Run Code Online (Sandbox Code Playgroud)

我想创建一种直观而简单的方法来获取表示这些错误的字符串.简单的解决方案是:

std::string const ErrorCode2Str(ErrorCode errorCode)
{
  switch (errorCode)
  {
    case OK:
    return "OK";
    case InvalidInput:
    return "Invalid Input";
    case BadAlloc:
    return "Allocation Error";
    case Other:
    return "Other Error";
    default:
    throw Something;
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?我能ErrorCode以某种方式重载一个字符串吗?我可以创建一个ErrorCode::str()功能吗?这个问题有标准解决方案吗?

Jer*_*fin 6

一种可能性是地图:

class to_str { 
    std::unordered_map<ErrorCode, std::string> strings;
public:
    to_str() {
        strings[ErrorCode::OK] = "Ok";
        strings[ErrorCode::InvalidInput] = "Invalid Input";
        strings[ErrorCode::BadAlloc] = "Allocation Error";
        strings[ErrorCode::Other] = "Other";
    }

    std::string operator()(ErrorCode e) { 
        return strings[e];
    }
};

// ...
auto e = foo(some_input);
if (e != ErrorCode::OK)
   std::cerr << to_str()(e);
Run Code Online (Sandbox Code Playgroud)

这显然不是一个巨大的差异,但我发现它至少略微更具可读性,并认为从长远来看它可能更具可维护性.