dynamic_cast<SomeType&>
が失敗した場合bad_cast
例外がスローされます。私のコードでは例外の別の階層があり、bad_cast
はその階層にないので、私のコードはbad_cast
を処理しません。代わりに別の例外をスローすることができますか?bad_castがスローされた場合にカスタムハンドラをインストールできますか?
私は、このようなカスタムハンドラ書きたいと思い意味:
void OnBadCast()
{
throw MyException("Bad cast");
}
をして何とかこのハンドラが呼び出される代わりのbad_cast
がスローされているように、C++ランタイム
RegisterMyBadCastHandler(&OnBadCast);
に登録。
これは可能ですか?
ダイナミックキャストをラップする独自のダイナミックキャストを作成し、例外を変換します。 – Dani
キャッチしないでください。 try-and-castする場合は、 'dynamic_cast'のポインタ形式を使用し、キャストの後にnullをテストします。次に、タイプが予想される場合には参照フォームを使用し、 'std :: bad_cast'はプログラムにバグがあることを示す場合に使用します。この場合、あなたはそれをバブルアップして*プログラムを止めたいと思っています*。 –
@Alexandre C .:すぐにプログラムを停止することは、必ずしもオプションではありません。場合によっては、例外を記録して次の項目に進む方がよい場合もあります。 – sharptooth