2011-02-05 3 views
3

boost :: exception을 사용하여 "customizable exception framework"을 생성하라는 메시지가 나타납니다. 날까지 나는 나에 의해 정의 된 단순한 예외만을 사용했다. 그래서 std :: exception, boost :: exception은 새로운 것입니다. 코드는 다음과 같습니다.boost :: exception 소개하기

#include <iterator> 
#include<string> 
#include <algorithm> 
#include<errno.h> 

struct My_exception:public virtual boost::exception 
{ 
}; 

int main() 
{ 
std::string fileName="tmp.txt"; 
std::string mode="r"; 

    try 
    { 
     if(fopen(fileName.c_str(),mode.c_str())) 
      std::cout << " file opened " << std::endl ; 
     else 
     { 
      My_exception e; 
      e << boost::errinfo_api_function("fopen") << boost::errinfo_file_name(fileName) 
      << boost::errinfo_file_open_mode(mode) << boost::errinfo_errno(errno); 

      throw e; 
     } 
    } 
    catch(My_exception e) 
    { 
    // extract the details here // 
    } 
    return 1; 
} 

이제는 캐치 예외에서 데이터를 추출하는 방법을 알고 싶습니다. 사람이 부스트 :: 예외 모든

답변

6

최초의 경로에 나를 인도 할 수, 코드에 오류가, 예를 들어, 당신은이를 쓸 수 없습니다 :

e << boost::errinfo_api_function("fopen") 

errinfo_api_function 때문에 만 int 사용할 수 있습니다. 그래서 같은 것을 할 :

e << boost::errinfo_api_function(100) //say 100 is error code for api error 

errinfo_api_function1에 두 번째 유형 매개 변수를 참조하십시오, 그것은 int입니다. 마찬가지로 다른 오류 클래스 템플릿을 확인하십시오. 나는이 게시물의 끝에, 당신이 사용하고있는 각각의 링크를 제공했습니다!

1.이 클래스 템플릿에는 두 가지 버전이 있는데, 하나는 int이고 다른 하나는 const char*입니다. version 1.40.0 errinfo_api_functionversion 1.45.0 errinfo_api_function을 비교하십시오. 의견에 지적한 dalle에게 감사드립니다. :-)


사용 get_error_info 기능 템플릿 boost::exception에서 데이터를 얻을 수 있습니다. boost::exception 문서의 말씀

참조,

가 부스트 :: 예외 객체에서 데이터를 검색하려면 get_error_info 기능 템플릿을 사용하십시오.


샘플 코드 :

//since second type of errinfo_file_name is std::string 
std::string fileError = get_error_info<errinfo_file_name>(e); 

//since second type of errinfo_errno is int 
int errno = get_error_info<errinfo_errno>(e); 

//since second type of errinfo_file_open_mode is std::string 
std::string mode = get_error_info<errinfo_file_open_mode>(e); 

//since second type of errinfo_api_function is int 
int apiError = get_error_info<errinfo_api_function>(e); 

더 나은 이해를 위해 다음을 참조하십시오 :

+0

@Nawaz, 나는 그것을 이해할 수 없다. 당신은 코드 – prabhakaran

+0

에서 이것을 보여줄 수 있습니까? @prabhakaran : 잠깐. 나는 샘플 코드를 작성하고있다. – Nawaz

+0

@Nawaz 다음 오류가 발생합니다 – prabhakaran

관련 문제