Возможный дубликат:
Определить тип исключения после того, как исключение поймано?
Мне известно об обработке исключений в 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 ++?
В 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
В C ++ ты вообще уточнить тип, который catch
можно поймать, вместо проверки типа.
Если вы хотите записать наиболее производный тип пойманного std::exception
тогда вы можете получить эту информацию через typeid
, поскольку std::exception
это полиморфный тип.
Если вы заинтересованы в регистрации типов исключений за пределами стандартной иерархии типов исключений, то хорошим способом является общий поиск (используя ...
) и вызовите общую функцию rethrower, которая знает о возможных нестандартных исключениях и повторных вызовах и catch
это те. Это централизует логику. Но, скорее всего, ваш вопрос не об этой несколько продвинутой и редкой технике (уместной только для использования библиотек с ненадлежащим поведением), а скорее о простом заблуждении об обработке исключений в C ++, для ответа на который укажите соответствующий тип что вы готовы поймать, в каждом catch
пункт.