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

c++ inheriting library exceptions in another library to pass them to a calling code

本文关键字:代码 调用 另一个 继承 异常 C++      更新时间:2023-10-16

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

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

class myException: public thirdParty {};

有没有一种简单的方法来捕获第三方实例并将其复制到myException?稍后我可能会向 myException 添加功能,但现在,我真的只想让第三方可用于调用代码,而不必在那里包含第三方的库。

当然,我确实意识到调用代码将知道第三方,因为来自第三方库的标头包含在我的库标头中,该标头包含在调用代码中。但我正在尝试建立一个合同,上面写着,"嘿,这些是我的库抛出的例外。稍后,我可能会换掉第三方库,但我仍然会抛出异常,这些异常会执行其异常的作用。

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

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

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

因此,我不会继承这些异常,而是创建一系列异常,以反映我希望代码引发的异常。您可以为它们指定相同的名称,但您应该是这些例外的所有者。