gpt4 book ai didi

c++ - 捕获许多类型的其他异常的异常类

转载 作者:行者123 更新时间:2023-11-30 01:28:47 25 4
gpt4 key购买 nike

我试图制作一个异常类(我们称之为 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 构造的异常来处理它。

注意:关于第二点中的重新抛出方案,它可能不适用于预标准编译器;例如它不适用于 Visual C++ 6.0。

关于c++ - 捕获许多类型的其他异常的异常类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7050247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com