0

是否有包含提升标头的官方规则/指南?我想知道直到最近我几乎总是使用 format #include <boost/library.hpp>。然后我遇到了Boost.Timer,其文档指出该库有 2 个版本,一个已弃用,一个新版本。

不推荐使用的版本位于 .<boost/timer.hpp>而新版本位于<boost/timer/timer.hpp>. 这两个版本看似没有任何交互就存在...

所以我想:“显然应该更喜欢'内部'标题”。因此,我查看了一些我更经常使用的标头,并注意到例如<boost/format.hpp>仅包含boost/format一些外部依赖项的标头。所以包括特定的标题似乎不是最好的主意。

所以我想:“好吧,也许这是一个过渡性的人工制品,他们正在朝着这个boost/library/header'计划努力”。

我注意到新的Boost.Atomics库 - 只是最近才添加的 - 并且惊呆了:有一个标题boost/atomics.hpp和一个带有同名标题的文件夹。

现在我有些困惑:是否有关于哪些标头被视为公共标头(类似于标准标头)以及 api 的内部方面从哪里开始的官方指南?还是完全由图书馆决定其标题的结构?

4

1 回答 1

0

据我所知,Boost Library Requirements and Guidelines没有定义头文件的范围和分离。Boost Header Policy定义了允许 headers 与其他 headers 共存的准则。然而,许多库通过以下方式提供了区别:

  • 为用户可能想要的类型/功能的逻辑划分提供单独的文件。
  • 将库内部的头文件放在detail目录中。
  • 在命名空间中声明内部类型、函数等detail

有些甚至通过将定义放在目录中来将函数声明与其在头文件中的定义分开来进行另一层区分impl

假设包含最高级别的头文件是安全的。此外,包含更具体的文件通常应该是安全的。例如:

  • 如果我想要boost::thread,boost::mutexboost::lock, 或者不介意额外的包含, 那么我可以包含boost/thread.hpp.
  • 如果我只想要boost::thread,那么我会包括boost/thread/thread_only.hpp。我不会直接包括boost/thread/detail/thread.hpp.
于 2013-03-08T19:55:43.603 回答