错误ID到错误字符串映射 - 在C ++中实现

时间:2012-08-21 12:15:13

标签: c++

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

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

    0,“没有错误”

    147,“输入无效”

    。 。

    2500,“未知错误”

  2. 方法const std::string& getErrorString(int errorId),它将从映射

  3. 中检索字符串

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

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

根据您拥有的频道数量以及调用该函数的频率,可能更容易拥有intconst char * s的结构数组并进行扫描。或者,您可以将此数组拆分为范围,但值得维护工作的性能收益是否由您决定。