私の質問:POSIXとWindowsの値std::error_codeからインスタンスを構築して、インスタンスをからの既知の値と比較できるようにする正しい方法は何ですか?errnoGetLastError()std::errc
より長い説明:私の目標は、std::error_codePOSIXおよびWindowsシステムでC++11のように機能する自作の例外オブジェクトにインスタンスを追加することです。
私のクロスプラットフォームアプリケーションでは、ファイルを開く/作成するためにPOSIXfopen()とWindowsの呼び出しを使用する自作のI/Oクラス階層を使用しています。CreateFile()それが失敗した場合、一般的な自作のopen_error例外がスローされます(これは、はいから派生していstd::exceptionますが、C ++の事前定義された例外クラスの1つではありません)。私はこのやや最低限の例外をエラーコードで拡張しようとしています。std::error_code私が正しく理解していれば、C++11でより正確になります。
私の問題は、errno(POSIXの場合)またはGetLastError()(Windowsの場合)からそのようなオブジェクトを構築する方法です。POSIXの場合、私が理解している限り、のコンストラクターで単純に使用できます。たとえば、次のようにerrnoなります。std::error_code
std::error_code ec(errno, std::generic_category());
そして、それecはからのよく知られた値に匹敵するはずですstd::errc。
もちろん、Windowsの場合も同様の呼び出しを行うことができます。
std::error_code ec(::GetLastError(), std::generic_category());
GetLastError()しかし、によって返される値がからのよく知られた定数にうまくマップされているかどうかはわかりませんstd::errc。BoostのシステムライブラリでBoostの実装についてerror_code読んだことがありますが、Boostの実装ではなく、実装について質問していstdます。
ファイルアクセスにC++ストリームの使用に切り替えることはお勧めしません。やりたいのですが、コードの半分をリファクタリングすることは、現時点でやりたいことではありません。