boost::hana 转发声明标头的用例是什么?

What is the use case of boost::hana forward declaration headers?

本文关键字:是什么 hana 转发 声明 boost      更新时间:2023-10-16

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

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

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

通过查看图书馆源代码,我感觉到这是非常聪明的东西,但我仍然不理解。


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

这里的手册中有关于这方面的一些信息:

此子目录包含 这 图书馆。它本质上是boost/hana/目录的镜像,除了 所有标头仅包含前向声明和文档。为 例如,要包含hana::tuple容器,可以使用boost/hana/tuple.hpp标头。但是,如果一个人只想要 该容器的前向声明,即boost/hana/fwd/tuple.hpp可以改用标头。请注意,标头的前向声明 在boost/hana/ext/boost/hana/functional/不提供。

也来自与作者的讨论:

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

和:

最后,我认为它可以很好地分离界面 和实施,也提供了一个系统放置的地方 文档。由于实现有时令人毛骨悚然,我认为 最好不要将文档与它纠缠在一起。

它直接从马的嘴里出来。我发现将整个鸡/蛋问题的实现与循环依赖分开是非常必要的。这是一种简洁的方法,我已经在自己的项目中采用了这种方法。