在我的项目中,我们有一个基本异常。用于处理显示错误对话框、日志等。我正在寻找一种方法来处理该异常的所有派生类,我认为这会起作用:
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);
}
这似乎有点丑陋。这样做的正确方法是什么?没有基础异常类?还是可以按照我想要的方式解决?
Ps:handle_error()
做的只是利用基类函数display_message_box()
并干净地关闭程序。