版权所有 © 2001 Kevlin Henney
版权所有 © 2013-2025 Antony Polukhin
根据 Boost 软件许可协议 1.0 版本分发。(请参阅随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)
目录
有时候需要泛型(这里指的是通用,而不是基于模板的编程)类型:真正可变的变量,可以容纳许多其他更具体类型的值,而不是 C++ 常规的严格和静态类型。我们可以区分三种基本类型的泛型类型
int
和 string
,并在它们之间自由转换,例如将 5
解释为 "5"
,反之亦然。 这种类型在脚本和其他解释型语言中很常见。boost::lexical_cast
支持这种转换功能。5
严格地保存为 int
,并且不会隐式转换为 "5"
或 5.0
。它们对解释的漠不关心,但对类型的意识有效地使它们成为安全的、单值的泛型容器,没有因歧义转换而产生意外的余地。void *
占据主导地位,它为令人惊讶的、未定义的行为提供了广阔的空间。boost::any
类(基于 Kevlin Henney 在 Valued Conversions, C++ Report 12(7), July/August 2000 中描述的同名类)是基于第二类的变体值类型。它支持任何值类型的复制,以及严格根据其类型安全检查提取该值。类似的设计,提供更合适的操作符,可以用于广义函数适配器 any_function
、广义迭代器适配器 any_iterator
以及其他需要统一运行时处理但仅支持编译时模板参数一致性的对象类型。
boost::anys::unique_any
类(基于 utils::AnyMovable 类,来自 🐙 userver framework)是基于第二类的变体值类型。 它支持严格根据其类型安全检查提取该值,并传递该值的所有权。可以将 boost::anys::unique_any
视为 boost::any
(或 std::any
) 的替代方案,它不需要从保持的类型进行复制或移动构造。