[c++] Восстановление типа исключения через ссылку
Не совсем понимаю, что за объект создается в catch при ловле базового исключения:
struct err { ... };
struct err_1 : public err { ... };
void f() try {
throw err_1();
}
catch (err& e) {
// является ли e обрезанным объектом от err_1 с типом err
// или виртуальная функция будет иметь доступ к данным определенным в err_1 ?
}
Допустим, для подсистемы ss1 создана иерархия исключений от struct ss1_err и набор функций типа
void g() throw(ss1_err,exception);
Затем пришлось перенести часть этих функций в подсистему ss2 со своей иерархией исключений ss2_err и переписывание системы функций из ss1 - не опция.
Как и с какой точностью обычно можно восстановить обработку исключений, унаследованных от ss2_er, если они проскальзывают через функцию типа:
void g() throw(ss1_err,exception); // ?