boost :: hana前向声明标头的用例是什么?

时间:2018-07-16 08:04:01

标签: c++ boost metaprogramming forward-declaration boost-hana

大多数hana标头还包括子文件夹fwd中包含的前向声明标头,例如#include<boost/hana/fwd/pair.hpp

AFAIK前向声明标头声明事物而不是定义事物,因此用户可以限制对函数和对象的指针(和引用)访问。

这对boost::hana(仅用于标头的模板库)有何意义?我唯一想到的是,如果您不打算实例化已声明的模板,那么前向声明就足够了,但是-首先使用它们的意义是什么?

通过查看库资源,我觉得它非常聪明,我仍然不理解。


想象一下,我只需要boost::hana模板的非常具体的实例。如果我在一个翻译单元中定义并将其实例化,并使用前向声明从所有其他单元链接到它们,是否可行?

1 个答案:

答案 0 :(得分:3)

here手册中对此有一些信息:

  

此子目录包含所有内容的前向声明   的       图书馆。它本质上是boost/hana/目录的镜像,除了       所有标题仅包含前向声明和文档。对于       例如,要包含hana::tuple容器,可以使用       boost/hana/tuple.hpp标头。但是,如果只想要       该容器的前向声明boost/hana/fwd/tuple.hpp       标头可以代替使用。请注意,标题的前向声明       boost/hana/ext/boost/hana/functional/中没有提供。

也来自与作者here的讨论:

  

基本原理是,我们可以#include轻量级声明   仅要求声明时,而不是完整定义。   这有助于编译时间。另外,对于某些   循环依赖的东西。

和:

  

最后,我认为它可以很好地分隔界面   和实施,也为系统地放置   文档。由于实施有时是繁琐的,我认为   最好不要将文档与文档纠缠在一起。

从马口直接出来。我发现,对于具有循环依赖关系的整个鸡肉/鸡蛋问题,将实现分开是非常必要的。这是我在自己的项目中采用的一种干净的方法。