gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:54 26 4
gpt4 key购买 nike

我正在编写一个与 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com