获取异常类型

时间:2014-10-26 08:17:03

标签: c++ error-handling try-catch

我想知道是否有办法从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语句。这可能吗?

1 个答案:

答案 0 :(得分:3)

您始终可以使用typeid(e).name()(请记住包含<typeinfo>标题)。

但对于如此制作的名称几乎没有保证。

使用Visual C ++它很好且可读性很高,因为g ++它被破坏了,所以你几乎需要使用一些特定于编译器的功能来解码它。