如果您没有访问原始类的权限,则无法正确捕获它:
C++标准/ [除句柄]:
这个
在一个
处理程序
描述的类型
可能导致这种情况的例外情况
处理程序
待输入。
这个
例外声明
例外声明
所以没有理想的干净的解决方案。但可能是一个可以接受的解决方法:从
std::exception
typeid()
(最终与
type_index
)确定
catch (std::exception& e)
阻止。
依我看,这应该是一个可以接受的方法来区分未知的异常
.what()
不是另一种选择。然而,不便之处在于
type_info
数据(例如。
typeid(e).name()
概念证明:
//somewhere
class MyExcept : public std::exception { };
...
// somewhere else
try {
throw std::exception();
} catch (std::exception &e) {
std::cout <<"case 1: " << typeid(e).name() << std::endl;
}
try {
throw MyExcept();
} catch (std::exception &e) {
std::cout <<"case 2: "<< typeid(e).name() << std::endl;
}
Online demo