Open gleb-kov opened 3 years ago
А чем именно не подходит использование std::exception:
try {
...
} catch(const std::exception& exc) {
std::cerr << "Caught exception " << typeid(exc).name() << ", exit.";
}
Да, это простой случай и здесь всё понятно. Есть кодовая база, где доступен только std::exception_ptr, чтобы заработало с ним, нужно пользоваться лапшой из try-catch-rethrow-try-catch. Например, здесь https://github.com/ClickHouse/ClickHouse/blob/0b67f593e059311966122c5529b3f6434feea946/src/Common/Exception.cpp -- показательный пример с tryLogException, эта конструкция с rethrow очень частая в репозиториях со своим util и тд. Кажется, проще бы было делать свитч по типу известному из std::exception_ptr. Возможно, есть ограничение из std, которые помешают такой реализации.
Ещё есть случай, когда брошено нечто ненаследуемое от std::exception. Это не идеологично конечно, но такого кода тоже много.
<Описание вашей идеи> Хочется знать информацию о типе исключения из std::exception_ptr.
Например, с помощью функции с сигнатурой:
std::type_info* exception_type(std::exception_ptr)
Смотрелось бы лучше как метод у std::exception_ptr, возвращающий const std::type_info&, но тип std::exception_ptr не специфирован.
Нечто похожее: __cxa_current_exception_type
<Примеры, где ваша идея будет полезна. Чем больше примеров и чем большую аудиторию они охватывают - тем лучше> Логгирование и дебаг