C++ 11の新しい<system_error>
ヘッダーについて考えてseries of blog postsを読んでいます。このヘッダは、操作(システムコールなど)によって返される特定のエラー値を表すerror_code
クラスを定義していると言います。ヘッダーにはsystem_error
クラスが定義されています。これは例外クラス(runtime_exception
から継承)で、error_codes
をラップするために使用されます。<system_error>を使用してerrnoを例外に変換する方法
私が知りたいのは、実際にシステムエラーをerrno
からsystem_error
に変換する方法です。私はそれを投げることができます。たとえば、POSIX open
関数は、-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()
が呼び出されない情報を返していません。
私はを行うことができると知っていますが、新しい<system_error>
ヘッダーを使用して正しい方法で行いたいと思います。私はちょうどその残りは明らかであるerrno
error_code
に変換することができますので、もし、その引数として単一error_code
を取るsystem_error
のコンストラクタがあり
。
これは本当に基本的なものだと思われるので、なぜ私はそれについて良いチュートリアルを見つけることができないのかわかりません。
ARMプロセッサでgcc 4.4.5を使用しています。
です。なんらかの理由で、私のシステムではまったく同じコードが "Error:system:14 - "を出力しますが、libstdC++などの最新バージョンを使用していない可能性があります。 –
同じ問題を抱えている人は、 'error.what()'は空文字列を返しますが、 'error.code()。message()'はnice文字列を返します。 –
あなたは 'std :: system_error(EFAULT、std :: system_category());' – Cubbi