包装'是一个好主意。异常?

时间:2014-05-09 14:46:23

标签: c++ exception-handling wrapper poco-libraries

我正在编写一个动态链接到POCO C++库的C ++库。我广泛使用POCO来做几件事,比如套接字,文件处理,日志记录等等。所以,我需要处理POCO可以抛出的异常。

除了与POCO相关的异常之外,我的代码可以抛出其他异常,原因有几个(基本上是RunTime异常)。 POCO C ++实际上包含一个RunTimeException类。所以,我可以使用它。

我的问题是:我应该只依赖POCO异常,并允许第三方使用我的库直接捕获它们吗?另一种选择是创建我自己的一组异常,包装POCO例外,并公开它们。这样,如果我决定将来摆脱POCO,我不需要改变那部分。只是我的包装异常。

还有其他没有明显的理由用我自己的POCO例外包装所有POCO例外吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:8)

这一切都取决于你的库的实际目的是什么(以及它运行的POCO上和/旁边的抽象级别),以及为什么/如果你使用POCO作为实现细节。 (这里我忽略了一个问题,如果您应该或不应该在您的级别处理异常,我们假设您应该从库的角度抛出异常)

您的图书馆恰好使用POCO来实现某些内容

你没有透露这些细节,你的图书馆的用户通常不会使用poco或完全了解它

在这里你应该包装你的摘要,或者如果你的标题中没有包含poco标题,可能会完全取代你自己的例外。

在未来的某个时候,您可能决定使用其他东西来实现您的库功能;让POCO异常传播实际上意味着你的API发生了变化,否则就没有必要。

您的图书馆的目的是“在POCO之上”

您图书馆的用户也应该在他们的代码中使用POCO,而您只需添加一些内容,例如:便利功能/语法

在这里,您可以假设您的库的用户熟悉POCO及其异常,并且在捕获POCO异常方面没有问题,因为他们可能已经在其他地方执行了此操作。

任何时候你都不会再使用POCO了。

尽管如此,您应该根据具体情况决定用户是否有用查看POCO异常或其中一个异常。如果您只是一个相当薄的包装器并且很清楚正在使用什么基础POCO功能,那么让POCO异常传播就足够了。

如果你正在做的事情远远超过任何标准POCO提供的功能,人们可能无法弄清楚当他们看到POCO异常时出了什么问题。在这种情况下,换行可以提供额外的信息,为库的用户提供有关库的抽象级别出错的更多信息。