Бьерн Страуструп.
Язык программирования С++
253
"закрывают глаза":
void muddle_on() { cerr << "
не замечаем особой ситуации\n"; }
//
...
STC
xx(&muddle_on);
// теперь действие unexpected() сводится
// просто к печати сообщения
Такое переопределение действия unexpected() позволяет нормально вернуться из функции,
обнаружившей неожиданную особую ситуацию. Несмотря на свою очевидную опасность, это решение
используется. Например, можно "закрыть глаза" на особые ситуации в одной части системы и
отлаживать другие ее части. Такой подход может быть полезен в процессе отладки и развития системы,
перенесенной с
языка программирования без особых ситуаций. Все-таки, как правило лучше, если
ошибки проявляются как можно раньше.
Возможно другое решение, когда вызов unexpected() преобразуется в запуск особой ситуации Fail
(неудача):
void fail() { throw Fail; }
//
...
STC
yy(&fail);
При таком решении вызывающая
функция не должна подробно разбираться в возможном результате
вызываемой функции: эта функции завершится либо успешно (т.е. возвратится нормально), либо
неудачно (т.е. запустит Fail). Очевидный недостаток этого решения в том, что не учитывается
дополнительная информация, которая может сопровождать особую ситуацию. Впрочем, при
необходимости ее можно учесть, если передавать информацию вместе с Fail.
Достарыңызбен бөлісу: