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 头文件策略的一部分。