std::experimental::ranges::value_type
来自 cppreference.cn
< cpp | experimental | ranges
在头文件 <experimental/ranges/iterator> 中定义 |
||
template< class I > struct value_type {}; |
(1) | |
template< class T > struct value_type<T*>; |
(2) | |
template< class I > requires std::is_array<I>::value |
(3) | |
template< class T > struct value_type<const T> : value_type<std::decay_t<T>> {}; |
(4) | |
template< class T > requires requires { typename T::value_type; } |
(5) | |
template< class T > requires requires { typename T::element_type; } |
(6) | |
计算类型 I 的关联值类型(如果存在)。用户可以为程序定义的类型特化 value_type。
1) 主模板是一个空结构体。
2) 指针的特化。如果 T 是对象类型,则提供一个成员类型 type,其等于 std::remove_cv_t<T>。否则,没有成员 type。
3) 数组类型的特化。
4) const 限定类型的特化。
5) 为定义了公共且可访问的成员类型 value_type 的类型提供的特化。如果
T::value_type
是对象类型,则提供一个成员类型 type
,其等于 T::value_type
。否则,没有成员 type
。6) 为定义了公共且可访问的成员类型 element_type 的类型提供的特化(例如,std::shared_ptr)。如果
T::element_type
是对象类型,则提供一个成员类型 type
,其等于 std::remove_cv_t<typename T::element_type>。否则,没有成员 type
。目录 |
[编辑] 助手别名模板
template< class T > using value_type_t = typename ranges::value_type<T>::type; |
(ranges TS) | |
[编辑] 注释
如果一个类型同时包含 value_type
成员和 element_type
成员,则特化 (5) 和 (6) 是有歧义的。
value_type
旨在用于 Readable
类型,例如迭代器。它不适用于范围。
[编辑] 示例
本节尚不完整 原因:没有示例 |
[编辑] 参见
指定通过应用运算符 * 类型是可读的(概念) | |
兼容性 traits 类,用于收集迭代器的关联类型 (别名模板) |