我有一对文件,比如Foo.cpp定义Foo.hpp一个类,比如Foo. 的方法有可能Foo抛出异常,定义在文件中MyException.hpp,但Foo.hpp不需要.MyException
显然.cpp需要包含异常标头,但我是否应该包含异常标头Foo.hpp以允许任何用于Foo定义异常的文件?
通常的经验法则是每个文件都应该包含它需要的标题。所以,不,除非那里需要MyException.hpp,否则不要添加。Foo.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 不应包含它自己的标头中的任何其他包含部分。