【发布时间】:2012-04-01 22:24:29
【问题描述】:
如果dynamic_cast<SomeType&> 失败bad_cast 会抛出异常。在我的代码中有一个单独的异常层次结构,bad_cast 不在那个层次结构中,所以我的代码不会处理bad_cast。我可以抛出一些其他异常吗?
我的意思是我想写一个这样的自定义处理程序:
void OnBadCast()
{
throw MyException( "Bad cast" );
}
并以某种方式在 C++ 运行时中注册它
RegisterMyBadCastHandler( &OnBadCast );
以便调用此处理程序而不是抛出 bad_cast。
这可能吗?
【问题讨论】:
-
您可以制作自己的动态转换来包装动态转换并翻译异常
-
不要抓住它。如果您想尝试并转换,则使用
dynamic_cast的指针形式并在转换后测试null。然后,在需要类型并且std::bad_cast表示程序中存在错误的情况下使用参考表单。在这种情况下,您希望它冒泡并停止程序。 -
@Alexandre C.:立即停止程序并不总是一种选择。有时最好记录异常并继续下一项要做的事情。
-
@sharptooth:这种情况很少见,可以在本地处理。请参阅我的答案以获取更新。
标签: c++ visual-c++ exception error-handling dynamic-cast