我有一些错误代码,我想表示为字符串:
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()功能吗?这个问题有标准解决方案吗?
一种可能性是地图:
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)
这显然不是一个巨大的差异,但我发现它至少略微更具可读性,并认为从长远来看它可能更具可维护性.