Boost C++ 库

...世界上最受尊敬和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码标准

PrevUpHomeNext

第二十七章 Boost.PolyCollection

Joaquín M López Muñoz

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

目录

简介
一种高效的多态数据结构
教程
基础知识
深入了解 Boost.PolyCollection 的分段特性
插入和就地构造
异常
算法
性能
容器定义
插入测试
处理测试
参考
多态模型
多态容器
头文件 "boost/poly_collection/exception.hpp" 概要
头文件 "boost/poly_collection/base_collection_fwd.hpp" 概要
头文件 "boost/poly_collection/base_collection.hpp" 概要
头文件 "boost/poly_collection/function_collection_fwd.hpp" 概要
头文件 "boost/poly_collection/function_collection.hpp" 概要
头文件 "boost/poly_collection/any_collection_fwd.hpp" 概要
头文件 "boost/poly_collection/any_collection.hpp" 概要
头文件 "boost/poly_collection/variant_collection_fwd.hpp" 概要
头文件 "boost/poly_collection/variant_collection.hpp" 概要
头文件 "boost/poly_collection/algorithm.hpp" 概要
未来工作
替代 RTTI 系统
复制 traits
并行算法
有序多态集合
发行说明
Boost 1.88
Boost 1.76
Boost 1.74
Boost 1.73
Boost 1.72
Boost 1.71
Boost 1.70
Boost 1.69
Boost 1.67
Boost 1.66
Boost 1.65
致谢

C++ 中的动态多态性要求对象(例如从抽象基类派生的类的实例)通过间接指针访问,因为它们的实际类型大小在使用时是未知的。因此,常规容器无法直接存储多态对象:通常的解决方法是使用指向堆分配元素的指针容器。在现代计算机架构中,这种模式会导致两种类型效率低下

  • 堆分配产生的内存不连续性会降低 CPU 缓存性能。
  • 在一系列多态对象上执行虚操作,这些对象的实际类型彼此不同,会导致分支预测失败并降低执行速度。

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

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

分别处理 C++ 中可用的四种不同类型的动态多态性

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

[Note] 注意

Boost.PolyCollection 是一个仅头文件的库。需要 C++11 支持。该库已验证可在 Visual Studio 2015、GCC 4.8 和 Clang 3.5 上工作。


PrevUpHomeNext