在我的项目中,我们有一个基本异常用于处理显示错误对话框、日志等。我正在寻找一种处理该异常所有派生类的方法,我认为以下方法可以实现:
try
{
main_loop();
}
catch (const MyExceptionBase* e)
{
handle_error(e);
}
每个被抛出的子实例都可以用指向其父实例的指针来表示。但是,当异常被抛出时,它现在是未处理的异常。
为什么会这样呢?C++只抛出引用作为异常吗?这样会使我的catch块无效吗?但是为什么这一开始就编译通过了呢?
我能想到的另一种方法是:
try
{
main_loop();
}
catch (const ExceptionA& e)
{
handle_error(e);
}
catch (const ExceptionB& e)
{
handle_error(e);
}
catch (const ExceptionC& e)
{
handle_error(e);
}
这种方式看起来有点丑陋。正确的做法是什么?不使用基础异常类吗?或者可以按照我想要的方式解决吗?
附注: handle_error()
函数只是利用基类函数 display_message_box()
并干净地关闭程序。