在头文件中包括异常类

Including an exception class in a header file

本文关键字:异常 包括 文件      更新时间:2023-10-16

我有一对文件,比如Foo.cpp和定义类的Foo.hpp,比如FooFoo的方法有可能抛出一个异常,在文件MyException.hpp中定义,但Foo.hpp不需要MyException

显然,.cpp需要包含异常标头,但我是否应该在 Foo.hpp 中包含异常标头,以允许任何使用 Foo 的文件具有异常的定义?

通常的经验法则是每个文件都应该包含它需要的标头。所以,不,除非那里需要,否则不要在Foo.hpp中添加MyException.hpp。处理异常类的代码应#include "MyException.hpp" 。因此,很明显,任何实现引发此异常的成员函数的文件都需要include "MyException.hpp",并且包含捕获此异常的代码的任何文件也需要它。

我假设您从 std::exception 派生自定义异常。

现在有两个用例(我想):

  • 该异常是有用的,无法解决它。因此,没有人会关心实际类型(您可以将其保留为源)。
  • 异常是特定的,操作可以解决它:在标头中公开异常类型。

我看到的大多数异常都是信息丰富的,没有什么可以解决受影响对象的状态。

使每个.h文件自给自足被认为是一种很好的样式,以便每个标头都包含/提供它需要的所有功能。鉴于此,将MyException.hpp包含在Foo.hpp中是有意义的。这样,Foo.h的用户在将其包含在代码中时就不会忍受编译时错误。

仅在 Foo.hpp 文件中包含 MyException.hpp 标头。让你的 Foo.cpp 只包含 Foo.hpp 标头。.cpp 文件仅用于实现头文件中声明的接口。.cpp不应包含其自己的标头中的任何其他包含部分。