Jor*_*alo 1 c++ exception-handling wrapper poco-libraries
我正在编写一个与POCO C++库动态链接的C++库.我广泛使用POCO来做几件事,比如套接字,文件处理,日志记录等.所以,我需要处理POCO可以抛出的异常.
除了与POCO相关的异常之外,我的代码可以抛出其他异常,原因有几个(基本上是RunTime异常).POCO C++实际上包含一个RunTimeException类.所以,我可以使用它.
我的问题是:我是否应该依赖POCO异常,并允许使用我的库的第三方直接捕获它们?另一种选择是创建我自己的异常集,包装POCO异常,并公开它们.这样,如果我决定将来摆脱POCO,我不需要改变那部分.只是我的包装异常.
还有其他没有明显的理由用我自己的POCO例外包装所有的POCO例外吗?
提前谢谢了.
这一切都取决于你的库的实际目的是什么(以及它运行的POCO上和/旁边的抽象级别),以及为什么/如果你使用POCO作为实现细节.(这里我忽略了这个问题,如果您应该或不应该在您的级别处理异常,我们假设您应该从库的角度抛出异常)
你没有透露这些细节,你的图书馆的用户通常不会使用poco或完全了解它
在这里你应该包装你的摘要,或者如果你的标题中没有包含poco标题可能完全取代它们你自己的例外.
在将来,您可能决定使用其他东西来实现库功能; 让POCO异常传播实际上意味着你的API发生了变化,否则就不需要了.
您的库的用户也应该在他们的代码中使用POCO,您只需添加一些东西,例如便利功能/语法
在这里,您可以假设您的库的用户熟悉POCO及其异常,并且捕获POCO异常没有问题,因为他们可能已经在其他地方执行了此操作.
任何时候你都不会再使用POCO了.
不过,您应该根据具体情况决定用户是否有用查看POCO异常或其中一个异常.如果您只是一个相当薄的包装器并且很清楚正在使用什么基础POCO功能,那么让POCO异常传播就足够了.
如果你正在做的事情远远超过任何标准POCO提供的功能,那么当人们看到POCO异常时,他们可能无法弄清楚到底出了什么问题.在这种情况下,换行可以提供额外的信息,为库的用户提供有关库的抽象级别出错的更多信息.