Написал некоторый класс, который внутри себя полностью "прозрачен" и "безопасен" по отношению к исключениям, т.е. нет утечки ресурсов, кругом RAII и все такое
, но catch нигде нет.
И вот дошла разработка до самого верхнего, "интерфейсного" класса, который будет предоставлен пользователю.
Я решил (кстати, может у кого-нибудь есть другие идеи?), что методы класса не должны бросать что попало, а только исключения определенного класса — например MyException. Я предполагаю, что пользователю будет удобнее централизованно ловить один тип исключений, а не копаться в исключениях разных уровней.
(* не использую сторонних библиотек, исключения могут возникнуть только стандартные и мои собственные)
Итак, я определил какие из интересующих меня стандартных исключений должны быть "завернуты" в MyException, какие MyException я сам буду бросать. Все остальные завертываются в UnknownError (: public MyException ).
Таким образом, получается, мне нужно "обернуть" вызов каждого публичного метода этого "юзерского" класса (включая конструктор) в try/catch с последующим перевыбросом MyException.
Вопросы следующие:
1) Набор блоков catch и код (разбор по типам) в них будет одинаковым для каждого публичного метода юзерского класса. Нет ли способа завернуть их все в какую-нибудь функцию или объект, чтобы не писать несколько раз одно и то же?
2) Какие вообще есть недостатки у такой схемы обработки исключений, которые я возмоно не учел?