614 Часть IV. Новые возможности C++

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

Собственный неожиданный обработчик задается практически так же, как обработчик завершения. Единственным осязаемым различием является то, что используемая для этого функция называется set_unexpected (). Листинг 22.23 показывает модифицированную версию программы, представленную в листинге 22.22, которая устанавливает новый неожиданный обработчик и затем приводит его в действие.

h06141.jpg

#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 {