Skip to content

Latest commit

 

History

History
80 lines (62 loc) · 3.29 KB

error_condition.md

File metadata and controls

80 lines (62 loc) · 3.29 KB

#error_condition

namespace std {
  class error_condition;
}

##概要 error_conditionは、error_codeに紐付くエラーを表現することを可能にするためのクラスである。

VC10、GCC 4.6.1ではgeneric_category()system_category()error_categoryオブジェクトはname()メンバ関数を除いて同じ挙動を行い、それぞれのdefault_error_conditon()メンバ関数も同じエラー値、同じカテゴリのerror_conditionを構築するため、実質error_codeerror_conditionは標準カテゴリでは等価な動作をする。だが、error_categoryを継承した新たなカテゴリを定義することにより、以下のようなエラーを表現することが可能となる:

  • 一つのエラー値で上位Nビット、下位Nビットで異なるエラー情報を表現する
  • 例: WindowsのHRESULT : 「HRESULT型とは? - UsefullCode.net
  • システムのエラーコードを汎用のエラーコードに変換し、error_codeにはシステムの環境依存エラー値、error_conditionには環境依存しない汎用エラー値を格納する

###メンバ関数

(constructor) コンストラクタ
~error_condition() = default デストラクタ
operator= 代入演算子
assign 値の再設定
clear エラー情報をクリアする
value エラー値を取得する
category エラーカテゴリを取得する
message エラーメッセージを取得する
explicit operator bool エラーかどうかを判定する

###例

#include <iostream>
#include <system_error>

int main()
{
  try {
    // 不正な引数エラー
    std::error_code ec(static_cast<int>(std::errc::invalid_argument),
                       std::generic_category());

    throw std::system_error(ec, "system error!");
  }
  catch (std::system_error& e) {
    // 例外オブジェクトからerror_codeを取得
    const std::error_code& ec = e.code();

    // error_codeからerror_conditionを取得
    const std::error_condition& cond = ec.default_error_condition();

    // エラー値とメッセージを出力
    std::cout << cond.value() << std::endl;
    std::cout << cond.message() << std::endl;
  }
}

###出力

22
Invalid argument

##バージョン ###言語

  • C++11

###処理系

###参照