Решено: "Пробрасывание" исключения из иерархии исключений (При "пробрасывании" меняется тип объекта-исключения)

Модератор: Модераторы разделов

Аватара пользователя
Zeus
Сообщения: 694

Решено: "Пробрасывание" исключения из иерархии исключений

Сообщение Zeus »

Код: Выделить всё

class Exception;
class NotInitException: public Exception;
class DeadlockException: public Exception;
class BusyException: public Exception;

try
{
 switch (/* какая-то функция возвращающая ошибку */)
 {
 case ok: return;
 case not_init:  throw  NotInitException;
 case deadlock:  throw  DeadlockException;
 case busy:  throw BusyException;
 }
// Какой-то ещё код, который может выбрасывать другие исключения - не из моей "иерархии исключений".
// ...
}
catch (Exception& e)
{
 throw e;
}
catch (...)
{
 throw Exception;
}

Т.е. "свои" исключения нужно пробрасывать дальше, но: оператор throw e; меняет тип исключения - дальше все мои исключения "летят" под типом Exception (я у них "спрашиваю" внутреннюю информаацию).
Что ж вместо одного catch (Exception& e) писать кэтчи на каждый тип моего исключения? :unsure:
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Решено: "Пробрасывание" исключения из иерархии исключений

Сообщение sergio »

Zeus писал(а):
15.11.2007 17:32
catch (...)
{
throw Exception;
}[code]
Т.е. "свои" исключения нужно пробрасывать дальше, но: оператор throw e; меняет тип исключения - дальше все мои исключения "летят" под типом Exception (я у них "спрашиваю" внутреннюю информаацию).
Что ж вместо одного catch (Exception& e) писать кэтчи на каждый тип моего исключения? :unsure:


Код: Выделить всё

catch (...)
{
 throw;
}
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Решено: "Пробрасывание" исключения из иерархии исключений

Сообщение Zeus »

"Ур-ра! Заработало!" (с) что-то-там-про-Простоквашино :)

Голова садовая...

Спасибо!
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Решено: "Пробрасывание" исключения из иерархии исключений

Сообщение sergio »

Ну т.е. наоборот видимо, вы поняли:

Код: Выделить всё

catch (Exception& e)  {
  throw;  // re-throw original exc
}
catch (...)  {
  throw Exception;
}
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали: