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を使用しています。