最近、私はC++ FAQ、特にこのページをよく読んでいます。
このセクションを読んで、著者が「例外ディスパッチャー」と呼んでいる「テクニック」を発見しました。これにより、誰かがすべての例外処理を 1 つの便利な関数にグループ化できます。
void handleException()
{
try {
throw; // ?!
}
catch (MyException& e) {
//...code to handle MyException...
}
catch (YourException& e) {
//...code to handle YourException...
}
}
void f()
{
try {
//...something that might throw...
}
catch (...) {
handleException();
}
}
私を悩ませているのは、単一のthrow;
ステートメントです。与えられた例を考えると、確かに、それが何をするかは明らかです。最初にキャッチされた例外を再スローし、再度f()
処理します。
しかし、節handleException()
から実行せずに、それ自体で直接呼び出すとどうなるでしょうか? catch()
指定された動作はありますか?
さらにボーナスポイントとして、あなたが知っている他の「奇妙な」(おそらく良い言葉ではない)使用法はthrow
ありますか?
ありがとうございました。