Вот настройка.
У меня есть программа на C ++, которая вызывает несколько функций, каждая из которых потенциально генерирует один и тот же набор исключений, и я хочу одинакового поведения для исключений в каждой функции (например, сообщение об ошибке печати& сбросить все данные по умолчанию для исключения A; просто распечатать для исключения B; завершить работу для всех остальных исключений).
Похоже, я должен иметь возможность установить поведение перехвата для вызова закрытой функции, котораяпросто сбрасывает ошибку и выполняет перехват, вот так:
void aFunction()
{
try{ /* do some stuff that might throw */ }
catch(...){handle();}
}
void bFunction()
{
try{ /* do some stuff that might throw */ }
catch(...){handle();}
}
void handle()
{
try{throw;}
catch(anException)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
catch(anotherException)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
catch(...)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
}
Теперь, что произойдет, если «handle» вызывается вне класса исключения.Я знаю, что это никогда не должно произойти, но мне интересно, если поведение не определено стандартом C ++.