Есть одна исключительная ситуация, но нужно чтобы на нее было 2 разных реакции.
void f1() {
//throw ситуация 1
}
void f2() {
//throw ситуация 1
}
int main() {
try
{
/*
.
.
.
*/
}
catch (...)
{
//реакция на ситуация 1
//в f1()
}
catch (...) {
//реакция на ситуация 1
//в f2()
}
return 0;
}
Класс ошибки должен быть один, но при этом в catch
реакции разные. Когда ситуация противоположна этой(возникают 2 разные ситуации, но ловится одном cathc
), я понимаю как реализовать. Есть догадка что это делается с помощью полиморфизма, но пока что я не понимаю как.
Есть разные варианты...
Либо обертываем каждый вызов f1()
в
try {
f1();
} catch (ThatException&)
{
throw F1Exception();
}
(соответственно, f2()
в свой блок), либо пишем функцию-обертку
void f1ex()
{
try {
f1();
} catch (ThatException&)
{
throw F1Exception();
}
}
(опять же - свою для f2()
) и вызываем ее. F1Exception
можно сделать наследником ThatException
- того самого исключения, которое f1
и f2
генерируют. Тогда можно будет не делать отдельные блоки, а проверять, скажем, с помощью dynamic_cast
, кто именно сгенерирован. Или сделать одно исключение FException
с полем, которое будет указывать, где оно сгенерировано.
Если генерация исключения выполняется именно вашим кодом - делаете исключения разными, или одним с добавлением поля, или разными, но унаследованными от общего. Если f1
/f2
вызывают нечто, что может дать одинаковые исключения - то как выше, оборачивайте эти вызовы в блоки try-catch или в функции-обертки.
"По-моему, так." (с) Пух
Если вы не можете добавлять классы исключений, но можете изменить существующие, то можно использовать такой вариант: добавьте в класс исключения поле которое будет хранить информацию о контексте в котором возникло исключение (имя функции например).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При отладки кода на c++, IDE выводит вот такое сообщение: FTH: (11040): * Fault tolerant heap shim applied to current processThis is usually due to previous crashes
Не могу понять в чем ошибка при наследовании, компилятор пишет, что не определен базовый класс, хотя все заголовки и определение класса я сделалВот...
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав...