Re[2]: Как вы работаете с исключениями
От: iix  
Дата: 07.03.07 16:57
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, iix, Вы писали:


iix>>Собственно вопрос вы преобразуете исключения или оставляете как есть?


N>Если в месте перехвата исключения я понимаю причину его возникновения, то имеет смысл бросить наружу более информативное исключение уровня бизнес-логики, сохранив в нем информацию о первоначальном исключении (например, в .NET с помощью InnerException).


N>Если не понимаю — выпускаю то исключение, которое было первоначально.


N>Я думаю, оборачивать все исключение в свое — плохая практика, их становится труднее фильтровать снаружи.



class A {
 public:
  s()
  {
    throw error_s();
  }
};

class B {
 public:
  t(A t)
  {
   try{
    t.s();
   }
   catch(...){
   // Преобразуем все исключения в свое исключение
   throw error_t();
   }
  }
};

class D {
 public:
  t(A l)
  {
   // Выпускаем наружу истинное исключение
   l.s();
   s(); // Может сгенерировать erro_s, bad_param, bad_alloc
   d(); // Может сгенерировать error_d, error_param
   f(); // Может сгенерировать error_f, run_error, any_error, bad_alloc
   g(); // Может сгенерировать error_g, thread_error, io_error, bad_thread_id
   h(); // Может сгенерировать и какието еше исключения...
  }
};

void main()
{
 A a;
 D d;
 //-------------------------------------------
 d.t(a); // Зде на выходе получаем уйму разных исключений
 //-------------------------------------------
 da(); // Может сгенерировать исключение bad_param
 da1(); // Может сгенерировать исключение thread_error
}


Если все исключения унаследованны от разных классов то как же отлавливать все это добро сгенерированное d.t(a). Не легче ли все исключени поймать
и преобразовать в свое (error_d_t_s)?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.