Boost C++ 库

...世界上最受推崇、设计最专业的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

第 27 章。Boost.PolyCollection - Boost C++ 函数库
PrevUpHomeNext

第 27 章。Boost.PolyCollection

Joaquín M López Muñoz

根据 Boost 软件许可证版本 1.0 发布。(参见随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)

C++ 中的动态多态要求通过间接指针来访问对象(例如,派生自抽象基类的类的实例),因为在使用点无法知道其实际的 类型大小。因此,常规容器无法直接存储多态对象:通常的变通方法是使用指向堆分配元素的指针容器。在现代计算机体系结构中,这种模式会产生两种效率低下之处:

  • 堆分配造成的内存不连续性会降低 CPU 缓存性能。
  • 对实际类型各不相同的多态对象序列执行虚拟操作,会导致 分支预测 失败,并降低执行速度。

当用户应用程序不关心特定的遍历顺序时,Boost.PolyCollection 提供了一种替代数据结构,该结构可以恢复内存连续性,并根据具体类型打包元素。提供了四种容器类模板:

  • boost::base_collection
  • boost::function_collection
  • boost::any_collection
  • boost::variant_collection

分别处理 C++ 中提供的四种不同类型的动态多态:

这些容器的接口与标准容器非常相似。此外,该库还提供了许多标准库算法(包括 std::for_each)的改进版本,并具有名为 类型恢复 的特殊功能,允许用户代码提供存储元素的具体类型的线索,以进一步提高与内联和 去虚拟化 相关的效率。

[Note] 注意

Boost.PolyCollection 是一个纯头文件库。需要 C++11 支持。该库已验证可与 Visual Studio 2015、GCC 4.8 和 Clang 3.5 配合使用。


PrevUpHomeNext