Как реюзать catch-блоки?
От: Ignoramus  
Дата: 16.11.05 19:15
Оценка: +1
Написал некоторый класс, который внутри себя полностью "прозрачен" и "безопасен" по отношению к исключениям, т.е. нет утечки ресурсов, кругом RAII и все такое , но catch нигде нет.

И вот дошла разработка до самого верхнего, "интерфейсного" класса, который будет предоставлен пользователю.

Я решил (кстати, может у кого-нибудь есть другие идеи?), что методы класса не должны бросать что попало, а только исключения определенного класса — например MyException. Я предполагаю, что пользователю будет удобнее централизованно ловить один тип исключений, а не копаться в исключениях разных уровней.

(* не использую сторонних библиотек, исключения могут возникнуть только стандартные и мои собственные)

Итак, я определил какие из интересующих меня стандартных исключений должны быть "завернуты" в MyException, какие MyException я сам буду бросать. Все остальные завертываются в UnknownError (: public MyException ).

Таким образом, получается, мне нужно "обернуть" вызов каждого публичного метода этого "юзерского" класса (включая конструктор) в try/catch с последующим перевыбросом MyException.

Вопросы следующие:

1) Набор блоков catch и код (разбор по типам) в них будет одинаковым для каждого публичного метода юзерского класса. Нет ли способа завернуть их все в какую-нибудь функцию или объект, чтобы не писать несколько раз одно и то же?

2) Какие вообще есть недостатки у такой схемы обработки исключений, которые я возмоно не учел?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.