c++如何用泛型异常对象处理所有类型的异常?

标签 c++ exception

在我的应用程序中,我使用不同的开源库,这会引发不同的异常。 我没有处理异常处理的经验,当我知道时,我总是只做 try/catch 事情
有问题。 现在我想构建某种对象来处理其中的所有异常。我不知道如何开始,即使可能
例如我有我的 A 类和 B 类

Class A 
{
 void method1() 
{
  Foo foo = new foo // external lib throws throw std::bad_alloc();
}
};

Class B 
{
 Void method1() 
{
  Int d = m_foo[0] // external lib  throw std::runtime_error( message );
}
};

我想以某种方式在我的应用程序的中心位置处理这些类型和其他类型 我应该使用什么策略?

更新:
在尝试了提供的建议并在我的应用程序的主体中实现了 try/catch 之后,当异常抛出时它永远不会出现的问题是我得到的是这个但它永远不会到达 try/catch:
visual studio run time error

最佳答案

您可以在main() 函数中使用try...catch 结构。 C++ 标准库的所有异常都派生自 std::exception,因此这是一个很好的备份。但是,您应该区分所有不同类型的异常,或者至少区分那些更常见的异常。您还可以创建自己的异常,作为派生自 std::runtime_error 的类。您可以有多个 catch 部分,但从更具体的部分到更一般的部分排序。

try {

// more things...

}
catch(const std::bad_alloc &ba)
{
    // memory error
    std::cerr << "Memory error" << std::endl;
    exit( EXIT_FAILURE );
}
catch(const std::runtime_error &re)
{
    // customized error, probably
    std::cerr << "ERROR: " << re.what() << std::endl;
    exit( EXIT_FAILURE );
}
catch(const std::exception &e)
{
    // general (unexpected) error
    std::cerr << "Unexpected ERROR: " << e.what() << std::endl;
    exit( EXIT_FAILURE );
}

记住您需要#include stdexceptexception。 希望这会有所帮助。

关于c++如何用泛型异常对象处理所有类型的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9495906/

相关文章:

c++ - 如何在Boost Semaphore中指定持续时间

c++ - 从命令行构建 Visual Studio 2008 解决方案

c++ - 有没有办法安全地指向函数内部声明的临时值?

javascript - JSON.parse ("") 因脚本错误而失败但不在 try/catch 中

c++ - 为什么这个 C++ 程序可以在 MacOS 上编译,但不能在 Ubuntu 上编译?

c++ - 在c++中发生任何异常的情况下运行通用代码

java - 无法找出异常

c# - 如何使用 AsyncPump 在异步控制台应用程序中保留异常上下文?

Scala - 链接 future 尝试区 block ?

c++ - 模板继承和基本成员变量