1

我正在实现一个将为我的应用程序处理错误消息的类。这个类的主要要求是

  1. 将错误 ID 存储到字符串映射(在编译期间)

    0,“无错误”

    147, "无效输入"

    . . .

    2500, “未知错误”

  2. const std::string& getErrorString(int errorId)从映射中检索字符串的方法

errorIds 不是连续的,因为我要为模块分配范围。我正在考虑使用映射来存储映射,但这意味着我必须在运行时将错误字符串插入到映射中 - 我不确定这是否有效,因为在编译过程中所有错误都可用。

实现错误 id 到字符串映射以实现高效检索和优化运行时间的最佳方法是什么?我没有提升。

4

2 回答 2

1

程序启动的动态初始化阶段是实现此目的的理想场所:

std::map<int, std::string> const Errors {
  { 0, "No Error" },
  { 1, "Bad mojo" },
  /* ... */
  { 2500, "Unknown error" },
};

std::string const & getErrorString(int errorId)
{
    auto it = Errors.find(errorId);
    return it != Errors.end() ? it->second : Errors.find(2500)->second;
}
于 2012-08-21T12:17:04.043 回答
0

根据您拥有的数量以及调用函数的频率,仅拥有一个带有ints 和const char *s 的结构数组并扫描它可能会更容易。或者,您可以将此数组拆分为多个范围,但是否值得维护工作的性能增益由您决定。

于 2012-08-21T12:17:15.167 回答