std::experimental::ranges::iterator_category

< cpp‎ | experimental‎ | ranges
template< class I >
struct iterator_category { };
(1)
template< class T >
struct iterator_category<T*>;
(2)
template< class T >
struct iterator_category<const T> : iterator_category<T> { };
(3)
template <class T>

  requires requires { typename T::iterator_category; }

struct iterator_category<T>;
(4)

计算类 I 的迭代器类别,若它存在。用户可以对程序定义类型特化 iterator_category

1) 初等模板是空结构体。
2) 对指针的特化。若 T 是对象类型,则提供等于 ranges::random_access_iterator_tag 的成员类型 type 。否则,无成员 type
3) 对 const 限定类型的特化。
4) 对定义公开且可访问的成员类型 iterator_category 的类型的特化。若 T::iterator_category 与命名空间 std 中的迭代器类别标签之一相同或从它派生,则将它映射到描述如下的命名空间 ranges 中的对应标签。否则,提供等于 T::iterator_category 的成员类型 type
  • T::iterator_categorystd::random_access_iterator_tag 相同或自之派生,则提供等于 ranges::random_access_iterator_tag 的成员类型 type
  • 否则,若 T::iterator_categorystd::bidirectional_iterator_tag 相同或自之派生,则提供等于 ranges::bidirectional_iterator_tag 的成员类型 type
  • 否则,若 T::iterator_categorystd::forward_iterator_tag 相同或自之派生,则提供等于 ranges::forward_iterator_tag 的成员类型 type
  • 否则,若 T::iterator_categorystd::input_iterator_tag 相同或自之派生,则提供等于 ranges::input_iterator_tag 的成员类型 type
  • 否则,若 T::iterator_categorystd::output_iterator_tag 相同或自之派生,则无成员 type

辅助别名模版

template< class T >
using iterator_category_t = typename ranges::iterator_category<T>::type;
(范围 TS)

示例

参阅

用于指示迭代器类别的空类类型
(类)
用于指示迭代器类别的空类
(类)
汇集迭代器的关联类型的兼容性特性类
(别名模板)