boost::hana 转发声明标头的用例是什么?
What is the use case of boost::hana forward declaration headers?
大多数 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 轻量级声明 而不是当只要求声明时的完整定义。 这有助于缩短编译时间。此外,对于某些人来说,这是必要的 循环依赖的东西。
和:
最后,我认为它可以很好地分离界面 和实施,也提供了一个系统放置的地方 文档。由于实现有时令人毛骨悚然,我认为 最好不要将文档与它纠缠在一起。
它直接从马的嘴里出来。我发现将整个鸡/蛋问题的实现与循环依赖分开是非常必要的。这是一种简洁的方法,我已经在自己的项目中采用了这种方法。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- boost::hana 转发声明标头的用例是什么?
- 为什么BOOST :: HANA :: EXAREMIS ::键入实验功能?类型列表的棘手是什么