C ++, ловить определенные пользователем исключения в нескольких блоках

Предположим, следующий пример. Существуют классы A-C, полученные из std :: exception:

#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() {};
};

До сих пор я был убежден, что обобщающий шаблон ловит исключение производного класса в нескольких блоках.

int main() {
try {
throw C<double>("a", "b", 10);
}

catch (C<double> &c1) {
std::cout << " C";
}

catch (B &b1) {
std::cout << " B";
}
}

К сожалению, второй блок со ссылкой на B пропущен. В чем проблема? Спасибо за вашу помощь.

0

Решение

Будет выполняться только первый соответствующий блок catch. Вы можете перебросить существующее исключение с помощью команды throw; оператор, но я не уверен, что это продолжит поиск в следующем блоке catch или только во внешнем try-catch.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]