头文件的组织结构
库被设计为模块化的,同时保持必须包括的头文件的数量以获得相当低的基本功能。 库的结构也故意保持简单,因为我们都喜欢简单。 以下是头文件组织的一般概述。 该库提供的所有标题的列表也可在左侧面板(标题标签下)看到,以备您需要更多详细信息。
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。
注意,只有适应外部组件所需的严格最小值才包括在这些头文件中(例如向前声明)。这意味着当想要使用外部组件时,应该包括外部组件的定义。例如:
#include <boost/hana/ext/std/tuple.hpp>
#include <boost/hana/front.hpp>
#include <tuple> //仍然需要创建元组
namespace hana = boost::hana;
int main() {
constexpr std :: tuple <int,char,float> xs {P1,'2',3.0f};
static_assert(hana :: front(xs)== 1,“”);
}
- boost/hana/experimental/
此目录包含实验性功能,可能会或可能不会在某一时刻进入库,但这被认为是有用的足够提供给公众。此子目录中的功能驻留在hana::experimental
命名空间中。此外,不要指望这些功能是稳定的;它们可以在库的发行之间被移动,重命名,改变或移除。这些功能还可能需要额外的外部依赖关系;每个功能记录其需要的附加依赖性(如果有)。
由于潜在的附加依赖性,这些头文件也不包括在库的主标题中。
- boost/hana/detail/
此目录包含内部需要的实用程序没有细节/保证是稳定的,所以你不应该使用它。
- boost/hana/concept/