gpt4 book ai didi

c++ - 获取异常类型

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:38 25 4
gpt4 key购买 nike

我想知道是否有办法从 std::exception 获取错误类型/名称的字符串表示形式.假设我 catch 了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)内有什么方法吗?我可以说的 block std::cout << "Unknown error type: " << err.getType() << '\n' << "Error message: " << err.what() << std::endl;

我要抓std::exception作为预防措施,以防万一没有其他东西捕获错误,但我希望能够识别确切的错误类型,以便我可以更新我的代码并为其包含另一个 catch 语句。这可能吗?

最佳答案

您可以随时使用 typeid(e).name() (记得包含 <typeinfo> header )。

但是对于这样产生的名字几乎没有任何保证。

在 Visual C++ 中,它很好看且可读,而在 g++ 中,它被破坏了,因此您实际上需要使用一些特定于编译器的功能来分解它。

关于c++ - 获取异常类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26571093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com