2011-09-30 11 views

答えて

2

この権利を外部から得ることは不可能ですresolve()。しかし、あなたは、アウトパラメータとしてerror_code&を取るオーバーロードのいずれかを使用することによって、それは、あなたのためにそれを行うために取得することができます。

をし、それをERROR_CODEを返しますセット。私はこれがerrnoまたはh_errnoを適切に包むことを信頼します。

5

error_codeオブジェクトを作成するには、エラーコードとカテゴリを提示する必要があります。

error_code ec (errc::connection_refused, system_category()); 
return ec; 

システムカテゴリを使用しているときに、エラーコードとしてerrno値を渡すことができる:ここでそのエラーが接続を拒否別のホストによるものであると仮定すると、一例です。たとえば:

#include <fstream> 
#include <cerrno> 
#include <boost/system/system_error.hpp> 

void foo() 
{ 
    ifstream file ("test.txt"); 
    if (!file.is_open()) 
    { 
     int err_code = errno; 
     boost::system::error_code ec (err_code 
      , boost::system::system_category()); 
     throw boost::system::system_error (ec, "cannot open file"); 
    } 
} 

は残念ながら、このライブラリはdocumented不十分であるので、私は物事を把握するためにheader filesを検討することをお勧めすることができます。コードはかなりシンプルで簡単です。

あなたのコンパイラがC++ 11をサポートしていて、それを使用したい場合は、この機能が標準になりました。私が知っている限り、gcc 4.6.1は既にそれを持っています。ここでは簡単な例です:システム障害を記述する例外をスローするsystem_errorをスローし、使用する必要がない場合

#include <cerrno> 
#include <system_error> 

std::error_code 
SystemError::getLastError() 
{ 
    int err_code = errno; 
    return std::error_code (err_code, std::system_category()); 
} 

void foo() 
{ 
    throw std::system_error (getLastError(), "something went wrong"); 
} 

は一般的に、ライブラリは周りerror_codeオブジェクトを渡します。 error_codeを例外なく使用するもう1つの理由は、異なるスレッド間でエラーを通知する必要がある場合です。しかし、C++ 11はa solution for propagating exceptions across threadsです。

希望すると助かります!

関連する問題