c++ - 我可以为抛出 bad_cast 的情况安装自定义处理程序吗?

标签 c++ visual-c++ exception error-handling dynamic-cast

万一dynamic_cast<SomeType&>失败 bad_cast抛出异常。在我的代码中有一个单独的异常层次结构和 bad_cast不在该层次结构中,因此我的代码无法处理 bad_cast .我可以抛出一些其他异常吗?

我的意思是我想像这样编写一个自定义处理程序:

void OnBadCast()
{ 
    throw MyException( "Bad cast" );
}

并以某种方式在 C++ 运行时注册它

RegisterMyBadCastHandler( &OnBadCast );

以便调用此处理程序而不是 bad_cast被抛出。

这可能吗?

最佳答案

我不认为你可以改变这种行为。

可以做的是使用您自己的脚轮,但是:

template<class T, class E> T myCast(E expr)
{
    try
    {
        return dynamic_cast<T>(expr);
    }
    catch(std::bad_cast e)
    {
        // custom handler
    }
};

关于c++ - 我可以为抛出 bad_cast 的情况安装自定义处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9736208/

相关文章:

c++ - 解释 gcov 输出以提高覆盖率的技巧是什么?

c++ - 动态设置数组大小 C++

java - 处理 HTTP 错误调用的最佳实践

c++ - 无法分配列表迭代器 [C++]

windows - 在内核空间使用 VC intrinsic

python - 区分函数参数错误触发的TypeError和函数体触发的TypeError

java - 使用什么异常来防止方法被多次调用?

java - 多个单词的 QCompleter 和 QLineEdit

c++ - 编译时未实现的 QColor 错误 (C++)

visual-c++ - 如何在 VC++ 中将两个资源合并到一个项目中?