std::indirectly_readable_traits
| 迭代器概念 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 迭代器原语 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 算法概念与工具 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 间接可调用概念 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 常用算法要求 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 工具 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 迭代器适配器 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 流迭代器 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 迭代器定制点 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++20)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++20)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 迭代器操作 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 范围访问 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
在标头
<iterator>
定义
|
||
|
template<
class I
>
struct indirectly_readable_traits { }; |
(1) | (C++20 起) |
|
template<
class T
>
struct indirectly_readable_traits<T*>; |
(2) | (C++20 起) |
|
template<
class I
>
requires std::is_array_v<I> |
(3) | (C++20 起) |
|
template<
class T
>
struct
indirectly_readable_traits<const
T>
: |
(4) | (C++20 起) |
|
template
</*has-member-value-type*/
T>
struct indirectly_readable_traits<T>; |
(5) | (C++20 起) |
|
template
</*has-member-element-type*/
T>
struct indirectly_readable_traits<T>; |
(6) | (C++20 起) |
|
template
</*has-member-value-type*/
T>
requires /*has-member-element-type*/<T> |
(7) | (C++20 起) |
|
template
</*has-member-value-type*/
T>
requires /*has-member-element-type*/<T>
&& |
(8) | (C++20 起) |
计算类型 I 的关联值类型,若它存在。用户可对程序定义类型特化
indirectly_readable_traits 。
value_type
。value_type 的类型(例如 std::reverse_iterator
)的特化。若 T::value_type 是对象类型,则提供等于 std::remove_cv_t<typename T::value_type> 的成员类型
value_type 。否则无成员 value_type 。element_type 的类型(例如 std::shared_ptr
)的特化。若 T::element_type 是对象类型,则提供等于 std::remove_cv_t<typename T::element_type> 的
value_type 。否则无成员 value_type 。value_type 与 element_type 的类型(例如 std::span )的特化。若
T::value_type 与 T::element_type 均为对象类型且在移除顶层
cv 限定符后为同一类型,则提供等于 std::remove_cv_t<typename T::value_type> 的成员类型
value_type 。否则无成员 value_type 。注解
有意将 value_type 对如迭代器的 indirectly_readable
类型使用。并非有意将它对范围使用。
示例
| 本节未完成 原因:暂无示例 |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 3446 | C++20 | 特化对含有 value_type 和 element_type
两个成员类型的类型有歧义
|
添加了消歧义特化 |
| LWG 3541 | C++20 | LWG 3446 对 value_type 与
element_type 相异的情况引入了硬错误
|
使之导致替换失败 |
参阅
|
(C++20)
|
指定类型通过应用运算符 * 可读 (概念) |
|
(C++20)(C++20)(C++20)(C++20)(C++20)
|
计算迭代器的关联类型 (别名模板) |
| 为迭代器各项性质提供统一接口 (类模板) |