614 Часть IV. Новые возможности C++
надеяться, что во второй раз ваш неожиданный обработчик сможет генерировать исключительную ситуацию, которая войдет в текущую спецификацию исключительных ситуаций.
Собственный неожиданный обработчик задается практически так же, как обработчик завершения. Единственным осязаемым различием является то, что используемая для этого функция называется set_unexpected (). Листинг 22.23 показывает модифицированную версию программы, представленную в листинге 22.22, которая устанавливает новый неожиданный обработчик и затем приводит его в действие.
#include <iostream.h>
#include <except.h>
class SimpleException } { };
class Pet { »;
class Dog : public Pet { f;
class Cat : public Pet ( };
// Это собственный неожиданный обработчик
void MyUnexpectedO
(
throw Dog();
}
// Здесь мы задаем спецификацию исключительных ситуаций
void TestFunction(bool boolFlag) throw(Pet)
(
// Флаг установлен?
if (boolFlag)
throw Cat() ;
// Нет! throw SimpleException();
»
void main()
{
// Определение неожиданного обработчика set_unexpected(MyUnexpected);
// Первый пример - перехватить Pet try {