我有一对文件,比如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 不应包含它自己的标头中的任何其他包含部分。