2

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

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

class myException: public thirdParty {};

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

当然,我确实意识到调用代码会知道thirdParty,因为第三方库的标头包含在我的库标头中,而我的库标头包含在调用代码中。但是我正在尝试建立一个合同,上面写着:“嘿,这些是我的库抛出的异常。稍后,我可能会换掉第三方库,但我仍然会抛出异常,它的异常所做的事情。 "

这是正确的吗?有没有更好的方法来做到这一点?我应该让我的调用代码知道第三方异常吗?

4

1 回答 1

2

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

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

所以我不会继承这些异常,而是创建一系列异常来反映我希望我的代码抛出的异常。您可以给它们起相同的名称,但您应该是这些例外的所有者。

于 2012-06-01T14:40:43.287 回答