std::experimental::ranges:: iterator_category
From cppreference.net
<
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
;
}
|
(4) | |
计算类
I
的迭代器类别(如果存在)。用户可为程序自定义类型特化
iterator_category
。
1)
主模板是一个空结构体。
2)
针对指针的特化。若
T
为对象类型,则提供成员类型
type
等于
ranges::random_access_iterator_tag
。否则不存在成员
type
。
3)
针对 const 限定类型的特化。
4)
针对定义了公开可访问成员类型
iterator_category
的类型的特化。若
T::iterator_category
与命名空间
std
中的某个迭代器类别标签相同或派生自该标签,则按如下方式映射到命名空间
ranges
中的对应标签。否则,提供成员类型
type
等于
T::iterator_category
。
-
若
T::iterator_category与 std::random_access_iterator_tag 相同或派生自该标签,则提供成员类型type等于 ranges::random_access_iterator_tag 。 -
否则,若
T::iterator_category与 std::bidirectional_iterator_tag 相同或派生自该标签,则提供成员类型type等于 ranges::bidirectional_iterator_tag 。 -
否则,若
T::iterator_category与 std::forward_iterator_tag 相同或派生自该标签,则提供成员类型type等于 ranges::forward_iterator_tag 。 -
否则,若
T::iterator_category与 std::input_iterator_tag 相同或派生自该标签,则提供成员类型type等于 ranges::input_iterator_tag 。 -
否则,若
T::iterator_category与 std::output_iterator_tag 相同或派生自该标签,则不提供成员type。
辅助别名模板
|
template
<
class
T
>
using iterator_category_t = typename ranges :: iterator_category < T > :: type ; |
(范围TS) | |
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
用于指示迭代器类别的空类类型
(类) |
|
|
用于指示迭代器类别的空类类型
(类) |
|
|
收集迭代器关联类型的兼容性特征类
(别名模板) |