在头文件中包含异常类

时间:2013-11-05 20:34:41

标签: c++ exception

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

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

  • 该例外是有用的,没有办法解决它。 因此,没有人会关心实际的类型(你可以保持它的来源)。
  • 异常是特定的,操作可以解决它: 在标题中将异常类型设为public。

我见过的大部分例外都是提供信息的,没有什么可以解决受影响对象的状态。

答案 2 :(得分:-2)

使每个.h文件自给自足被认为是一种很好的风格,因此每个标题都包含/提供它所需的所有功能。鉴于此,在MyException.hpp中包含Foo.hpp是有意义的。这样,Foo.h的用户只有在代码中包含它时才会遇到编译时错误。

答案 3 :(得分:-2)

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