命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | ranges
 
 
范围库 (Ranges library)
范围适配器 (Range adaptors)
 
定义于头文件 <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-unqualified 的程序定义类型特化 disable_sized_range。此类特化应可在 常量表达式 中使用,并具有类型 const bool

目录

[edit] 语义要求

1) 给定类型为 std::remove_reference_t<T> 的左值 tT 建模 sized_range 仅当

[edit] 注意

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

disable_sized_range 不能为数组类型或引用类型进行特化。

[edit] 示例

#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() {}

[edit] 参阅

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