Опыт показывает, что вам редко нужно больше, чем несколько классов исключений.
В большей части моего кода (в основном числовые - если вы делаете, например, IO, ситуация другая), я бросаю стандартные исключения (runtime_error
, invalid_argument
, ...), потому что они имеют тенденцию указывать на не может быть легко восстановлено из (кроме, возможно, invalid_argument
), и которое, вероятно, не будет перехвачено пользовательским кодом (кроме, возможно, на верхнем уровне, чтобы бросить окно сообщения пользователю).
Если есть какое-то исключение, которое предназначено для перехвата типичным кодом пользователя, например. bad_custom_cast
, или bad_market_data_identifier
, вместо того, чтобы переходить к основному (как ошибка числовой процедуры или bad_alloc
), я создаю пользовательский класс. Но на самом деле это довольно редко.