版权所有 © 2016-2025 Joaquín M López Muñoz
根据 Boost 软件许可证版本 1.0 发布。(参见随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)
目录
"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" 摘要C++ 中的动态多态要求通过间接指针来访问对象(例如,派生自抽象基类的类的实例),因为在使用点无法知道其实际的 类型和 大小。因此,常规容器无法直接存储多态对象:通常的变通方法是使用指向堆分配元素的指针容器。在现代计算机体系结构中,这种模式会产生两种效率低下之处:
当用户应用程序不关心特定的遍历顺序时,Boost.PolyCollection 提供了一种替代数据结构,该结构可以恢复内存连续性,并根据具体类型打包元素。提供了四种容器类模板:
boost::base_collection
boost::function_collection
boost::any_collection
boost::variant_collection
分别处理 C++ 中提供的四种不同类型的动态多态:
std::function 精神的函数包装。std::variant 中一样。这些容器的接口与标准容器非常相似。此外,该库还提供了许多标准库算法(包括 std::for_each)的改进版本,并具有名为 类型恢复 的特殊功能,允许用户代码提供存储元素的具体类型的线索,以进一步提高与内联和 去虚拟化 相关的效率。
![]() |
注意 |
|---|---|
Boost.PolyCollection 是一个纯头文件库。需要 C++11 支持。该库已验证可与 Visual Studio 2015、GCC 4.8 和 Clang 3.5 配合使用。 |