c++ - 'wrap' 异常是个好主意吗?

标签 c++ exception wrapper poco-libraries

我正在编写一个与 POCO C++ 动态链接的 C++ 库图书馆。我将 POCO 广泛用于多种用途,例如套接字、文件处理、日志记录等。因此,我需要处理 POCO 可能抛出的异常。

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

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

还有没有其他明显的理由用我自己的异常来包装所有 POCO 异常?

非常感谢。

最佳答案

这完全取决于您的库的实际目的是什么(以及它在 POCO 之上/与 POCO 一起运行的抽象级别),以及为什么/如果您使用 POCO 作为实现细节。 (这里我忽略了你是否应该在你的级别处理异常的问题,让我们假设这是一种你应该从你的库的角度抛出异常的情况)

您的库恰好使用 POCO 来实现某些东西

您无处公开该细节,并且您图书馆的用户通常不会使用 poco 或根本不知道它

在这里你应该包装你的异常,或者如果你不在你的 header 中包含 poco header ,可能会完全用你自己的异常替换它们。

在未来的某个时候,您可能会决定使用其他东西来实现您的库功能;让 POCO 异常传播本质上意味着对您的 API 进行更改,否则这将是不必要的。

您的图书馆旨在成为“POCO 之上”的东西

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

在这里,您可以假设您的图书馆的用户熟悉 POCO 及其异常,并且在捕获 POCO 异常方面没有问题,因为他们可能已经在其他地方这样做了。

您极不可能在任何时候不再使用 POCO。

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

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

关于c++ - 'wrap' 异常是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23567553/

相关文章:

C++ 虚函数是正常调用还是虚拟调用?

c++ - libmicrohttpd 的 MHD_resume_connection() 无法与外部选择正常工作

Java连接重置问题

api - 编写处理异常的 Scala 方法签名的最佳方式

java - 重新抛出已检查的异常

html - 用内容包裹垂直条

C# 数据库包装器设计

c++ - cocos2dx 中的重写函数

c++ - LNK2019 构造函数/析构函数使用 C++ Dll

python - 将矩阵乘法从 Python 转换为 C++