命名空间
变体
操作

std::ranges::sized_range, std::ranges::disable_sized_range

来自 cppreference.com
< cpp‎ | ranges
 
 
范围库
范围适配器
 
定义在头文件 <ranges>
template< class T >

concept sized_range = ranges::range<T> &&
    requires(T& t) {
        ranges::size(t);

    };
(1) (自 C++20)
template< class >
constexpr bool disable_sized_range = false;
(2) (自 C++20)
1) sized_range 概念指定了了解其大小的 range 类型的要求,该大小可以通过 size 函数在恒定时间内获取。
2) disable_sized_range 用于允许使用提供 size 函数(作为成员或非成员)但实际上不符合 sized_range 模型的范围类型。用户可以为 cv 未限定的程序定义类型专门化 disable_sized_range。此类专门化应在 常量表达式 中可用,并且类型为 const bool.

内容

[编辑] 语义要求

1) 给定类型为 std::remove_reference_t<T> 的左值 t,仅当以下条件成立时,T 才符合 sized_range 模型:

[编辑] 注意

disable_sized_range 不能用于选择退出其迭代器和哨兵满足 sized_sentinel_for 的范围;应改为使用 std::disable_sized_sentinel_for

disable_sized_range 无法为数组类型或引用类型专门化。

[编辑] 示例

#include <forward_list>
#include <list>
#include <ranges>
 
static_assert
(
    std::ranges::sized_range<std::list<int>> and
    not std::ranges::sized_range<std::forward_list<int>>
);
 
int main() {}

[编辑] 另请参阅

指定其迭代器类型满足 random_access_iterator 的范围
(概念) [编辑]
指定其迭代器类型满足 contiguous_iterator 的范围
(概念) [编辑]