std::ranges::view, std::ranges::enable_view, std::ranges::view_base

来自cppreference.com
< cpp‎ | ranges
定义于头文件 <ranges>
template<class T>
concept view = ranges::range<T> && std::semiregular<T> && ranges::enable_view<T>;
(1)
template<class T>
inline constexpr bool enable_view = /*see description*/ ;
(2)
struct view_base { };
(3)
1) view 概念指定拥有常数时间复制、移动及赋值操作的 range 类型(例如一对迭代器或按需创建其元素的生成器 range 。值得注意的是标准库容器是 range 但不是 view )。
2) enable_view 变量模板用于指示 range 是否为 view ,方式如下:

对于类型 Tenable_view<T> 的默认值是:

  • std::derived_from<T, view_base>true ,则 enable_view<T>true
  • 否则,若 T 是类模板 std::initializer_liststd::setstd::multisetstd::unordered_setstd::unordered_multisetstd::match_results 的特化,则 enable_view<T>false
  • 否则,若 Tconst T 均实现 rangeranges::range_reference_t<T>ranges::range_reference_t<const T> 不是相同类型,则 enable_view<T>false 。(换言之,深常性隐含所有权,浅常性隐含引用(视图)语义)
  • 否则, enable_view<T>true
3)view_base 派生会允许 range 类型实现 view

注意

用户可对要实现 view 的无 cv 限定的程序定义类型特化 enable_viewtrue ,而对不实现的类型特化为 false 。这些特化应当可用于常量表达式并拥有 const bool 类型。