2011-09-30 3 views

답변

2

외부에서이 권리를 취득하는 것은 불가능합니다. resolve(). 하지만 당신은 아웃 - 매개 변수로 error_code& 걸리는 오버로드 중 하나를 사용하여, 당신을 위해 그것을 얻을 수 있습니다

을하고 다음을 ERROR_CODE을 반환 세트. 나는 이것이 errno 또는 h_errno을 적절히 감쌀 것이라고 믿는다.

5

error_code 개체를 만들려면 오류 코드와 범주를 찾아야합니다. 다음 예는, 그 오차를 가정 인해 다른 호스트 접속 거부하는 것이다 시스템 종류를 사용하는 경우에도 에러 코드로 errno 값을 전달할 수

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

. 예를 들면 :

#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은 이미 있습니다. 다음은 간단한 예는 다음

#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 객체를 전달 던져 시스템 오류를 나타내는 예외를 발생하는 system_error을 사용할 필요가없는 경우. error_code을 예외없이 사용하는 또 다른 이유는 다른 스레드에서 오류를 알릴 필요가있을 때입니다. 그러나 C++ 11은 a solution for propagating exceptions across threads입니다.

희망이 있습니다.

관련 문제