捕获多种类型的其他异常的异常类
Exception class that catches many types of other exceptions
我试图创建一个异常类(让我们称之为EXP),它将能够捕获各种类型的其他异常类(例如,std::exception),但没有任何成功。主要的问题是我需要捕获许多类型的异常,我想知道是否有比编写一个包含所有可能捕获的宏更好的方法。
我想做的(如果可能的话)是这样的:
class EXP : ?? maybe must inherit ??
{
// EXP implementation
}
EXP是这样定义的:
try
{
throw std::exception("error string");
}
catch(const EXP& e)
{
// catches the exception
}
那么如果它是可能的,我如何定义EXP,使它将做我想要的?
谢谢!: -)
- 首先,捕获每个异常类型的通常是个糟糕的主意。一般来说,如果您不知道异常是什么,那么当它发生时,您如何有效地处理它?
- 第二,如果你想捕获每一个异常类型,你可以使用
catch (...)
。但是,这并不能直接让您访问捕获的异常对象。为了访问异常对象,你必须重新抛出和catch
你支持的每个特定类型(这个重新抛出和重新捕获可以在一个单独的函数中完成,这可能是你问题的解决方案)。 - 第三,即使这样也只能捕获c++异常。其他错误,如分段错误/访问违规将不会被捕获。如果你想捕获这种错误,你需要使用特定于平台的操作或语言扩展。
- 最后,在捕获异常时不考虑类型转换。如果抛出异常类型
E
,那么您只能通过捕获E
或其任何基类来处理它。但是你不能,例如,通过捕获一个可以从E
构造的异常来处理它。
注意:关于第二点中的重新抛出方案,它可能不适用于预标准编译器;
最好的方法是从std::exception
(或其标准子类型,如std::runtime_error
)派生所有异常类型;然后,您可以使用catch (std::exception const &)
捕获代码、标准库或任何其他行为良好的库抛出的任何内容。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 从构造函数抛出异常时如何克服内存泄漏
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在 C++ 中使用递归填充 D2 数组,有时工作正常,其他时会引发异常
- 如果从在其他函数中调用的函数引发异常会发生什么情况
- Catch2 迫使我在异常中添加对 std::string 的强制转换,这会产生其他问题吗?
- 助推.测试崩溃,***异常:MSVC上的其他
- 在 C++ 的异常层次结构中引入其他基类型
- 受其他异常影响的异常的生命周期
- 捕获多种类型的其他异常的异常类
- 捕获 Segfault 或任何其他错误/异常/信号C++例如在 Java 中捕获异常
- 确实抛出C++函数声明排除了抛出其他异常
- 锁定boost::unique_lock时抛出的异常,该锁已经锁定在其他线程中