在头文件中包括异常类
Including an exception class in a header file
我有一对文件,比如Foo.cpp
和定义类的Foo.hpp
,比如Foo
。 Foo
的方法有可能抛出一个异常,在文件MyException.hpp
中定义,但Foo.hpp
不需要MyException
。
显然,.cpp
需要包含异常标头,但我是否应该在 Foo.hpp
中包含异常标头,以允许任何使用 Foo
的文件具有异常的定义?
通常的经验法则是每个文件都应该包含它需要的标头。所以,不,除非那里需要,否则不要在Foo.hpp
中添加MyException.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不应包含其自己的标头中的任何其他包含部分。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 为什么 cmake 许可证<>样式不包括?
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 计算平均值,不包括上次得分
- 为什么异常不退出程序?
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 从多个源构造一个对象,包括一个对象向量
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 异常包括字符指针和整数指针
- 我应该包括bad_function_call异常
- 在头文件中包括异常类