"包装"异常是一个好主意吗?

Jor*_*alo 1 c++ exception-handling wrapper poco-libraries

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

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

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

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

提前谢谢了.

Pla*_*aHH 8

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

您的图书馆恰好使用POCO来实现某些功能

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

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

在将来,您可能决定使用其他东西来实现库功能; 让POCO异常传播实际上意味着你的API发生了变化,否则就不需要了.

你的图书馆是"在POCO之上"的东西

您的库的用户也应该在他们的代码中使用POCO,您只需添加一些东西,例如便利功能/语法

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

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

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

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