头文件的组织结构

库被设计为模块化的,同时保持必须包括的头文件的数量以获得相当低的基本功能。 库的结构也故意保持简单,因为我们都喜欢简单。 以下是头文件组织的一般概述。 该库提供的所有标题的列表也可在左侧面板(标题标签下)看到,以备您需要更多详细信息。

  • boost/hana.hpp
    这是库的主标题,其中包括库的整个公共接口。请注意,外部适配器,实验功能和实现细节不包括在这个头文件中,但是,因为其中一些需要额外的依赖。

  • boost/hana/
    这是包含库提供的一切的定义的库的主目录。库提供的每个算法和容器都有自己的头文件。对于一个名为XXX的容器或算法,相应的头文件是boost/hana/XXX.hpp。

    • boost/hana/concept/
      这个子目录包含Hana的概念的定义。这些头文件提供了一种检查对象是否是相应概念的模型的方法,并且它们有时还为其他相关概念提供默认实现,这些概念在每个概念的基础上被记录。它们还包括与该概念相关联的所有算法。
    • boost/hana/core/
      这个子目录包含标签调度和其他相关实用程序(如make和to)的机制。
    • boost/hana/fwd/
      这个子目录包含库中所有内容的前向声明。它本质上是boost/hana/目录的镜像,除了所有的头文件只包含前向声明和文档。例如,要包含hana::tuple容器,可以使用boost/hana/tuple.hpp头文件。但是,如果只想要该容器的前向声明,可以使用boost/hana/fwd/tuple.hpp头文件。请注意,不提供在boost/ hana/ext/和boost/hana/functional/中的头文件的转发声明。
    • boost/hana/functional/
      这个子目录包含通常有用的各种函数对象,但不一定属于一个概念。
    • boost/hana/ext/
      此目录包含外部库的适配器。对于命名空间ns中名为xxx的组件,外部适配器位于boost/hana/ext/ns/xxx.hpp标头中。例如,std::tuple的外部适配器位于boost/hana/ext/std/tuple.hpp头文件中,而boost::mpl::vector的外部适配器位于boost/hana/ext/boost/mpl/vector.hpp。

    注意,只有适应外部组件所需的严格最小值才包括在这些头文件中(例如向前声明)。这意味着当想要使用外部组件时,应该包括外部组件的定义。例如:

    1. #include <boost/hana/ext/std/tuple.hpp>
    2. #include <boost/hana/front.hpp>
    3. #include <tuple> //仍然需要创建元组
    4. namespace hana = boost::hana;
    5. int main() {
    6. constexpr std :: tuple <intcharfloat> xs {P1'2'3.0f};
    7. static_assert(hana :: front(xs)== 1,“”);
    8. }
    • boost/hana/experimental/
      此目录包含实验性功能,可能会或可能不会在某一时刻进入库,但这被认为是有用的足够提供给公众。此子目录中的功能驻留在hana::experimental命名空间中。此外,不要指望这些功能是稳定的;它们可以在库的发行之间被移动,重命名,改变或移除。这些功能还可能需要额外的外部依赖关系;每个功能记录其需要的附加依赖性(如果有)。

    由于潜在的附加依赖性,这些头文件也不包括在库的主标题中。

    • boost/hana/detail/
      此目录包含内部需要的实用程序没有细节/保证是稳定的,所以你不应该使用它。