Boost 头文件策略
头文件是库与用户代码和其他库交互的地方。为了和平且高效地共存,头文件必须是“好邻居”。
以下是 Boost 头文件的标准。其中许多也是通用使用的合理指南。
- 头文件名应使用 .hpp (小写) 扩展名。
- 除非有意进行多次包含,否则请将头文件包裹在 #ifndef 保护中。使用命名约定,以最大限度地减少与其他代码的宏名称冲突的可能性。示例头文件使用了 Boost 的约定,即所有大写字母,头文件名称以命名空间名称为前缀,并以 HPP 为后缀,以下划线分隔。
- 将头文件内容包裹在命名空间中,以防止全局命名空间污染。与旧的方法(例如在全局名称中添加奇怪的前缀)相比,命名空间方法是首选的污染控制方法。旨在与其他 Boost 库良好协作的库应放置在命名空间中boost.
- 确保仅包含头文件内容的翻译单元能够成功编译。
- 将头文件放在子目录中,以防止与其他库中同名的头文件冲突。父目录被添加到编译器的包含搜索路径中。然后,您的代码和用户代码都在#include指令中指定子目录。因此,示例头文件将通过以下方式包含#include <boost/furball.hpp>. (注意,不鼓励使用以下语法从当前文件目录包含#include "furball.hpp"语法。)
- 类定义的首选顺序是公共成员、受保护成员,最后是私有成员。
- 如果需要处理编译器或平台配置问题,请包含 boost/config.hpp 配置头文件。
示例头文件
// Boost general library furball.hpp header file ---------------------------// < Copyright and license notice, as indicated in the license page > // See https://boost.ac.cn/ for latest version. #ifndef BOOST_FURBALL_HPP #define BOOST_FURBALL_HPP namespace boost { // Furball class declaration -----------------------------------------------// class furball { public: void throw_up(); private: int whatever; }; // furball } // namespace #endif // include guard
编码风格
细心的读者会注意到,示例头文件在缩进、大括号定位、注释结束大括号以及类似的格式化问题上采用了一定的编码风格。这些风格问题被视为个人偏好,而不是 Boost 头文件策略的一部分。