考虑以下情况:我有一个包含第三方库的库。这个第三方库抛出从 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/