C++继承另一个库中的库异常以将它们传递给调用代码

标签 c++ exception

考虑以下情况:我有一个包含第三方库的库。这个第三方库抛出从 std::exception 派生的非常漂亮、有用的异常。我想将这些异常传达给调用我的库的代码,但我不想也将第三方库包含在调用代码中。该第三方库稍后可能会发生变化。

在我的库中创建我自己的类并继承第三方异常似乎是有意义的,如下所示:

class myException: public thirdParty {};

是否有一种简单的方法来捕获thirdParty 的实例并将其复制到myException?稍后我可能会向 myException 添加功能,但现在,我真的只想让调用代码可以使用thirdParty,而无需在其中包含第三方库。

当然,我确实意识到调用代码将了解第三方,因为来自第三方库的 header 包含在我的库 header 中,而我的库 header 包含在调用代码中。但我试图建立一个契约(Contract),说:“嘿,这些是我的库抛出的异常。稍后,我可能会更换第三方库,但我仍然会抛出异常,这些异常会执行其异常的操作。 ”

这是对的吗?有更好的方法吗?我应该让我的调用代码了解第三方异常吗?

最佳答案

如果目标是减少与第三方库的耦合,那么您应该将您的代码视为边界。因此,您不会将实现泄露给您的用户。

问题是为什么你的用户需要关心第三方库抛出的异常?他们应该关心您代码的抽象和接口(interface)。

所以我不会继承这些异常,而是创建一系列异常来反射(reflect)我希望代码抛出的异常。您可以为它们指定相同的名称,但您应该是这些异常(exception)的所有者。

关于C++继承另一个库中的库异常以将它们传递给调用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851772/

相关文章:

java - 自定义异常不断给我 "Exception: Unknown exception"

c++ - 如何将正则表达式 vector 与一个字符串匹配?

c++ - 基于 bool 模板参数的启用方法

c++ - 在 QTreeWidget 中显示文件系统

exception - ARM 上的同步外部中止

c# - Windows 服务中未处理的异常

c++ - 不违反标准的近恒定时间旋转

c++ - 从嵌套类的 SWIG 手册部分应用全局内部类解决方法时如何防止 SWIG 内存泄漏?

visual-studio-2010 - 如何跳回在 Visual Studio 2010 调试器中引发异常的代码行?

python - 调试python多处理中的错误