【发布时间】:2012-12-26 02:37:30
【问题描述】:
将错误代码从枚举映射到字符串的更有效方法是什么? (在 C++ 中)
例如,现在我正在做这样的事情:
std::string ErrorCodeToString(enum errorCode)
{
switch (errorCode)
{
case ERROR_ONE: return "ERROR_ONE";
case ERROR_TWO: return "ERROR_TWO";
...
default:
break;
}
return "UNKNOWN";
}
如果我做这样的事情会更有效吗?:
#define ToStr( name ) # name;
std::string MapError(enum errorCode)
{
switch (errorCode)
{
case ERROR_ONE: return ToStr(ERROR_ONE);
case ERROR_TWO: return ToStr(ERROR_TWO);
...
default:
break;
}
return "UNKNOWN";
}
也许有人对此有任何建议或想法? 谢谢。
【问题讨论】:
-
不,这不是更有效。他们是一样的。你知道
std::exception和 C++ 中的异常处理吗?另外,您是否预计会有这么多错误以至于发现它们的效率很重要? -
如果您考虑运行时性能,这两者绝对相同。
-
我是不是没听懂问题?
-
我会省略
default:分支;如果你这样做了,那么如果你忘记包含所有代码,你应该会得到一个编译器警告。 -
如果您有很好的错误代码原因(例如,如果 - 在糟糕的设计中 - 一个函数由于性能关键代码中的不同原因而经常失败,并且您希望自动捕获原因),我建议使用
std::error_code用于处理代码而不是自定义方式:akrzemi1.wordpress.com/2017/07/12/your-own-error-code
标签: c++ string error-code