gpt4 book ai didi

c++ - 捕获 C++ 基础异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:01 24 4
gpt4 key购买 nike

在我的项目中,我们有一个基本异常。用于处理显示错误对话框、日志等。我正在寻找一种方法来处理该异常的所有派生类,我认为这可行:

try
{
main_loop();
}
catch (const MyExceptionBase* e)
{
handle_error(e);
}

因为抛出的每个子实例都可以用指向其父实例的指针来表示。但是不,当现在抛出异常时,它是一个未处理的异常。

这是为什么? c++ 只抛出异常作为引用吗?从而使我的 catch block 变得无用?但是为什么这甚至首先编译?

我能想到的唯一其他方法是:

try
{
main_loop();
}
catch (const ExceptionA& e)
{
handle_error(e);
}
catch (const ExceptionB& e)
{
handle_error(e);
}
catch (const ExceptionC& e)
{
handle_error(e);
}

这看起来有点丑陋。这样做的正确方法是什么?没有基础异常类?还是可以按照我想要的方式解决?

Ps: handle_error() 所做的只是利用基类函数 display_message_box() 并干净地关闭程序。

最佳答案

只需混合使用这两种方法:使用基类和使用引用。

try
{
main_loop();
}
catch (const MyExceptionBase& e)
{
handle_error(e);
}

顺便说一句,如果你抛出指针,C++ 可以捕获它们。但这并不可取。

关于c++ - 捕获 C++ 基础异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/541078/

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