2017-12-09 5 views
0

다음 예제를 가정 해보십시오.C++, 여러 블록에서 사용자 정의 예외를 catch하십시오.

#include <exception> 
#include <string> 
#include <iostream> 

class A : public std::exception { 
std::string a_text; 

public: 
A(const std::string & a_text_) : a_text(a_text_) {} 
virtual ~A() throw() { } 
}; 

class B : public A { 
const std::string b_text; 

public: 
B(const std::string &a_text_, const std::string & b_text_) : A(a_text_), b_text(b_text_) {} 
virtual ~B() throw() {} 
}; 

template <typename T> 
class C : public B { 
T x; 

public: 
C(const std::string & a_text_, const std::string & b_text_, const T x_) : 
    B (b_text_, a_text_), x(x_) { } 

virtual ~C() throw() {}; 
}; 

지금까지 내가 패턴을 일반화하는 것은 여러 블록에서 파생 클래스의 예외를 catch 확신되었습니다 표준 : : 예외에서 파생 된 클래스 A-C가있다. 불행하게도, B를 참조하는 제 2 블록은 스킵된다. 문제가 어디에 있습니까? 당신의 도움을 주셔서 감사합니다.

답변

0

일치하는 첫 번째 catch 블록 만 실행됩니다. "throw;"를 사용하여 기존 예외를 다시 throw 할 수 있습니다. 문이 있지만 다음 catch 블록 또는 외부 try-catch 경우에만 검색을 계속할지 잘 모르겠습니다.

+1

@ SoronelHaetir : 존재하는 경우 외부 캐치 블록에서 계속됩니다. – justik

관련 문제