我想知道是否有办法从std::exception
获取错误类型/名称的字符串表示。假设我抓住std::exception &err
,有没有办法说err.getName()
或err.getType()
。我有一个项目可以抛出各种各样的错误,但我想得到确切的类型,如果它没有被其他东西捕获。我将展示我的意思。
为简单起见,我们假设libraryA
有几个唯一定义的异常类型(libraryA::Exception_#
,其中#
被一个数字替换,以唯一地标识错误。)
以下是一些简单的代码:
try{
doSomeTaskThatMightThrowAnError();
}catch(libraryA::Exception_1 &err){
std::cout << "Error type 1: " << err.what() << std::endl;
}catch(libraryA::Exception_2 &err){
std::cout << "Error type 2: " << err.what() << std::endl;
}catch(libraryA::Exception_3 &err){
std::cout << "Error type 3: " << err.what() << std::endl;
}catch(std::exception &err){
std::cout << "Unknown error: " << err.what() << std::endl;
}
在catch(std::exception &err)
块中是否有某种方法我可以说std::cout << "Unknown error type: " << err.getType() << '\n' << "Error message: " << err.what() << std::endl;
我希望捕获std::exception
作为预防措施,以防其他任何事情都没有捕获错误,但我希望能够识别确切的错误类型,以便我可以更新我的代码并为其包含另一个catch语句。这可能吗?
答案 0 :(得分:3)
您始终可以使用typeid(e).name()
(请记住包含<typeinfo>
标题)。
但对于如此制作的名称几乎没有保证。
使用Visual C ++它很好且可读性很高,因为g ++它被破坏了,所以你几乎需要使用一些特定于编译器的功能来解码它。