1

アプリケーションのエラー メッセージを処理するクラスを実装しています。このクラスの主な要件は次のとおりです。

  1. エラー ID を文字列マッピングに保存します (コンパイル時)。

    0、「エラーなし」

    147、「無効な入力」

    . . .

    2500、「不明なエラー」

  2. const std::string& getErrorString(int errorId)マッピングから文字列を取得するメソッド

モジュールに範囲を割り当てるため、errorId は連続していません。マップを使用してマッピングを保存することを検討していましたが、これは、実行時にエラー文字列をマップに挿入する必要があることを意味します。すべてのエラーはコンパイル中に利用できるため、これが効率的かどうかはわかりません。

エラー 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

intそれらの数と関数を呼び出す頻度によっては、 s とs を使用して構造体の配列を作成し、const char *それをスキャンする方が簡単な場合があります。または、この配列を範囲に分割することもできますが、メンテナンス作業に見合うパフォーマンスの向上が得られるかどうかは、ユーザーが判断する必要があります。

于 2012-08-21T12:17:15.167 に答える