3

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

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

4

4 回答 4

4

通常的经验法则是每个文件都应该包含它需要的标题。所以,不,除非那里需要MyException.hpp,否则不要添加。Foo.hpp处理您的异常类的代码应该#include "MyException.hpp". 所以,很明显,无论哪个文件实现了抛出这个异常的成员函数,include "MyException.hpp"任何包含捕获这个异常的代码的文件也需要它。

于 2013-11-05T20:38:23.930 回答
1

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

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

  • 该异常提供信息,无法解决此问题。因此,没有人会关心实际类型(您可以将其保留为源)。
  • 异常是特定的,并且可以通过操作来解决它:在标头中公开异常类型。

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

于 2013-11-05T20:53:23.160 回答
-1

使每个.h文件自给自足被认为是一种很好的风格,这样每个标题都将包含/提供它需要的所有功能。鉴于此,包含MyException.hppFoo.hpp. 这样,Foo.h当他们只是将编译时错误包含在他们的代码中时,他们的用户将不会忍受编译时错误。

于 2013-11-05T20:37:51.610 回答
-2

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

于 2013-11-05T20:38:38.957 回答