Boost C++ 库

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

PrevUpHomeNext

第 4 章。Boost.Any 1.2

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

目录

简介
示例
ValueType 要求
Boost.Any 的参考部分
头文件 <boost/any.hpp>
头文件 <boost/any/bad_any_cast.hpp>
头文件 <boost/any/basic_any.hpp>
头文件 <boost/any/fwd.hpp>
头文件 <boost/any/unique_any.hpp>
鸣谢

有时候需要一个泛型(在通用意义上,而不是基于模板的编程意义上)类型:变量是真正可变的,可以容纳许多其他更具体类型的值,而不是 C++ 常用的严格静态类型。我们可以区分三种基本的泛型类型:

  • 转换类型,可以保存多种可能的值类型之一,例如 intstring,并在它们之间自由转换,例如将 5 解释为 "5" 或反之亦然。这种类型在脚本和其他解释型语言中很常见。boost::lexical_cast 支持这种转换功能。
  • 可区分的类型,其中包含不同类型的值,但不尝试在它们之间进行转换,即 5 严格地保存为 int,并且不会隐式转换为 "5"5.0。它们对解释的漠视但对类型的感知有效地使它们成为安全的、单个值的泛型容器,没有因歧义转换而产生意外的空间。
  • 不加区分的类型,可以引用任何东西,但忽略实际的底层类型,将所有形式的访问和解释都委托给程序员。这个领域由 void * 主导,它为令人惊讶的未定义行为提供了充足的空间。

boost::any 类(基于 Kevlin Henney 在 Valued ConversionsC++ Report 12(7),2000 年 7/8 月中描述的同名类)是一种基于第二类的变体值类型。它支持任何值类型的复制,以及严格根据其类型对该值进行安全检查的提取。类似的设计,提供更合适的操作符,可用于广义函数适配器 any_function,广义迭代器适配器 any_iterator,以及其他需要统一运行时处理但仅支持编译时模板参数一致性的对象类型。

boost::anys::unique_any 类(基于 utils::AnyMovable 类,来自 🐙 userver 框架)是一种基于第二类的变体值类型。它支持安全检查地严格根据其类型提取该值,并传递该值的所有权。可以将 boost::anys::unique_any 看作是 boost::any(或 std::any)的替代方案,它不需要从保存的类型进行复制或移动构造。


PrevUpHomeNext