私のプロジェクトでは、基本的な例外があります。エラーダイアログ表示やログ表示などのハンドリングに。その例外のすべての派生クラスを処理する方法を探していますが、これでうまくいくと思いました:
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()
、プログラムを完全にシャットダウンするだけです。