C++11の新しいヘッダーに関する一連の思慮深いブログ投稿を読みました。<system_error>ヘッダーはerror_code、操作(システムコールなど)によって返される特定のエラー値を表すクラスを定義することを示しています。ヘッダーsystem_errorは、例外クラス(から継承runtime_exception)であり、sをラップするために使用されるクラスを定義することを示していerror_codesます。
私が知りたいのは、実際にシステムエラーをからに変換してerrnoスローsystem_errorできるようにする方法です。たとえば、POSIXopen関数は-1を返し、設定することでエラーを報告しますerrno。したがって、例外をスローしたい場合は、以下のコードをどのように完了する必要がありますか?
void x()
{
fd = open("foo", O_RDWR);
if (fd == -1)
{
throw /* need some code here to make a std::system_error from errno */;
}
}
私はランダムに試しました:
errno = ENOENT;
throw std::system_error();
ただし、結果として生じる例外は、what()が呼び出されたときに情報を返しません。
できることはわかっていますが、新しいヘッダーthrow errno;を使用して、正しい方法で実行したいと思います。<system_error>
そのためのコンストラクターがあり、その引数としてsystem_error単一を取りerror_codeます。したがって、私が変換できるのであればerrno、error_code残りは明白なはずです。
これは本当に基本的なことのように思われるので、なぜそれに関する良いチュートリアルが見つからないのかわかりません。
重要な場合は、ARMプロセッサでgcc4.4.5を使用しています。