namespace std {
class error_condition;
}
概要
error_condition
は、error_code
に紐付くエラーを表現することを可能にするためのクラスである。
Visual C++ 2010、GCC 4.6.1ではgeneric_category()
とsystem_category()
のerror_category
オブジェクトはname()
メンバ関数を除いて同じ挙動を行い、それぞれのdefault_error_condition()
メンバ関数も同じエラー値、同じカテゴリのerror_condition
を構築するため、実質error_code
とerror_condition
は標準カテゴリでは等価な動作をする。だが、error_category
を継承した新たなカテゴリを定義することにより、以下のようなエラーを表現することが可能となる:
- 一つのエラー値で上位Nビット、下位Nビットで異なるエラー情報を表現する
- 例: WindowsのHRESULT : 「HRESULT型とは? - UsefullCode.net」
- システムのエラーコードを汎用のエラーコードに変換し、
error_code
にはシステムの環境依存エラー値、error_condition
には環境依存しない汎用エラー値を格納する
メンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | C++11 |
~error_condition() = default |
デストラクタ | C++11 |
operator= |
代入演算子 | C++11 |
assign |
値の再設定 | C++11 |
clear |
エラー情報をクリアする | C++11 |
value |
エラー値を取得する | C++11 |
category |
エラーカテゴリを取得する | C++11 |
message |
エラーメッセージを取得する | C++11 |
explicit operator bool |
エラーかどうかを判定する | C++11 |
非メンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
operator== |
等値比較 | C++11 |
operator!= |
非等値比較 (C++20からoperator== により使用可能) |
C++11 |
operator<=> |
三方比較 | C++20 |
operator< |
左辺が右辺より小さいか判定する (C++20からoperator<=> により使用可能) |
C++11 |
bool operator<=(const error_condition&, const error_condition&) noexcept; |
左辺が右辺以下か判定する (operator<=> により使用可能) |
C++20 |
bool operator>(const error_condition&, const error_condition&) noexcept; |
左辺が右辺より大きいか判定する (operator<=> により使用可能) |
C++20 |
bool operator>=(const error_condition&, const error_condition&) noexcept; |
左辺が右辺以上か判定する (operator<=> により使用可能) |
C++20 |
| make_error_condition
| errc
からerror_condition
オブジェクトを生成する | C++11 |
例
#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;
}
}
xxxxxxxxxx
#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
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2010 ✅