Чтобы понять тип исключения, используйте try / catch в VStack Overflow

Возможный дубликат:
Определить тип исключения после того, как исключение поймано?

Мне известно об обработке исключений в C #:

try{
// code causing exception
}
catch(System.Exception e){
// Here e variable holds the information about the actual exception that has occured in try block.
}

Но я хочу добиться того же в VC ++ (на VS 2008).
Как мы фиксируем ТИП исключения, произошедшего в блоке try в VC ++, как у нас нет концепции пакетов в VC ++?

0

Решение

В C ++ нет единого базового класса для всех исключений, поэтому единственный вариант — указать, что вы хотите обработать

try
{
}
catch (const std::exception& e)
{
}
catch (const my_base_exception& e)
{
}
catch (const some_library_base_exception& e)
{
}
catch (...)
{
// ups something unknown
}

Имейте в виду, однако, что если ваш my_base_exception происходит от std::exceptionбудет перехвачено catch (const std::exception& e)так что поменяйте местами эти два улова, если это так. то же самое касается some_library_base_exception

1

Другие решения

В C ++ ты вообще уточнить тип, который catch можно поймать, вместо проверки типа.

Если вы хотите записать наиболее производный тип пойманного std::exceptionтогда вы можете получить эту информацию через typeid, поскольку std::exception это полиморфный тип.

Если вы заинтересованы в регистрации типов исключений за пределами стандартной иерархии типов исключений, то хорошим способом является общий поиск (используя ...) и вызовите общую функцию rethrower, которая знает о возможных нестандартных исключениях и повторных вызовах и catchэто те. Это централизует логику. Но, скорее всего, ваш вопрос не об этой несколько продвинутой и редкой технике (уместной только для использования библиотек с ненадлежащим поведением), а скорее о простом заблуждении об обработке исключений в C ++, для ответа на который укажите соответствующий тип что вы готовы поймать, в каждом catch пункт.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector