我有一对文件,比如Foo.cpp
和Foo.hpp
定义一个类,比如Foo
。 Foo
的方法有可能抛出异常,在文件MyException.hpp
中定义,但Foo.hpp
不需要MyException
。
显然.cpp
需要包含异常标头,但我是否应该在Foo.hpp
中包含异常标头,以允许使用Foo
的任何文件定义异常?
答案 0 :(得分:3)
通常的经验法则是每个文件都应包含所需的标头。所以,不,不要将MyException.hpp
添加到Foo.hpp
,除非在那里需要它。处理异常类的代码应为#include "MyException.hpp"
。因此,显然,无论哪个文件实现引发此异常的成员函数都需要include "MyException.hpp"
,并且包含捕获此异常的代码的任何文件也需要它。
答案 1 :(得分:1)
我假设您从std :: exception派生自定义异常。
现在有两个用例(我想):
我见过的大部分例外都是提供信息的,没有什么可以解决受影响对象的状态。
答案 2 :(得分:-2)
使每个.h
文件自给自足被认为是一种很好的风格,因此每个标题都包含/提供它所需的所有功能。鉴于此,在MyException.hpp
中包含Foo.hpp
是有意义的。这样,Foo.h
的用户只有在代码中包含它时才会遇到编译时错误。
答案 3 :(得分:-2)
仅在Foo.hpp文件中包含MyException.hpp标头。让你的Foo.cpp只包含Foo.hpp标题。 .cpp文件仅用于实现头文件中声明的接口。 .cpp不应该包含来自它自己标头的任何其他包含部分。