В моем проекте у нас есть базовое исключение. Для обработки показа диалогов об ошибках, лог и тому подобное.
Я ищу способ обработки всех производных классов этого исключения, я думал, что это будет работать:
try
{
main_loop();
}
catch (const MyExceptionBase* e)
{
handle_error(e);
}
Поскольку каждый брошенный дочерний экземпляр может быть представлен указателем на его родителя. Но нет, когда создаются исключения, это необработанное исключение.
Почему это? С ++ только генерирует исключения как ссылки? Тем самым делая мой блок уловок бесполезным? Но тогда почему это вообще компилируется?
Единственное, о чем я могу думать, это:
try
{
main_loop();
}
catch (const ExceptionA& e)
{
handle_error(e);
}
catch (const ExceptionB& e)
{
handle_error(e);
}
catch (const ExceptionC& e)
{
handle_error(e);
}
Который кажется уродливым. Как правильно это сделать? У вас нет базового класса исключений? Или это можно решить так, как я хочу?
Ps: handle_error()
просто использует функцию базового класса display_message_box()
и полностью завершает работу программы.