11

C++0x には、 と の 2 つの定義済みerror_categoryオブジェクトがgeneric_category()ありsystem_category()ます。私がこれまでに理解したことから、system_category()はオペレーティング システムから返されたエラーに使用する必要があり、値に対応する にgeneric_category()ある一般的な値に使用する必要があります。std::errcerrno

errnoしかし、値オペレーティング システムによって返されるエラーである Unix ライクなシステムでは、どうすればよいでしょうか? を使用する必要system_category()がありますか (非 Unix ライクなシステムでは間違っており、 が必要です#ifdef)、または使用する必要がありますgeneric_category()(非標準errno値の Unix ライクなシステムでは間違っています)。

4

2 に答える 2

2

C++ 標準ライブラリ関数を使用して、OS (Unix などの POSIX ベースの OS を含む任意の OS) からエラーを報告することを意図してsystem_category()います - 以下の C++11 標準からの引用を参照してください。

17.6.5.14 エラーコードの値 [value.error.codes]

1 C++ 標準ライブラリの特定の関数は、std::error_code (19.5.2.1) オブジェクトを介してエラーを報告します。そのオブジェクトの category() メンバーは、オペレーティング システムに起因するエラーに対して std::system_category() を返す必要があります。、または他の場所で発生したエラーの実装定義の error_category オブジェクトへの参照。実装では、これらのエラー カテゴリごとに value() の可能な値を定義する必要があります。[ 例: POSIX に基づくオペレーティング システムの場合、実装では std::system_category() 値を POSIX errno 値と同一として定義し、オペレーティング システムのドキュメントで定義されている追加の値を使用することをお勧めします。POSIX に基づいていないオペレーティング システムの実装では、オペレーティング システムの値と同じ値を定義することが推奨されます。オペレーティング システムに起因しないエラーの場合、実装によって、関連する値の列挙型が提供される場合があります。—終わりの例]

于 2015-01-03T22:01:05.810 に答える
1

system_category実際にオペレーティング システムである場合 (または OS 固有の機能からエラーを報告する場合) でない限り、使用しないでください。カテゴリは、必ずしもエラー コードが何を意味するかではなく、エラーの発生元を示します。system_categoryしたがって、可能なエラー コードのセットがと同じであることは完全に正当generic_categoryです。

于 2011-09-25T00:48:17.467 に答える