std::ranges::view, std::ranges::enable_view, std::ranges::view_base
来自cppreference.com
定义于头文件 <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) | |
2) enable_view 变量模板用于指示 range 是否为 view ,方式如下:
对于类型 T , enable_view<T> 的默认值是:
- 若 std::derived_from<T, view_base> 为 true ,则 enable_view<T> 为 true 。
- 否则,若 T 是类模板 std::initializer_list 、 std::set 、 std::multiset 、 std::unordered_set 、 std::unordered_multiset 或 std::match_results 的特化,则 enable_view<T> 为 false
- 否则,若 T 与 const T 均实现 range 且 ranges::range_reference_t<T> 与 ranges::range_reference_t<const T> 不是相同类型,则 enable_view<T> 为 false 。(换言之,深常性隐含所有权,浅常性隐含引用(视图)语义)
- 否则, enable_view<T> 为 true 。
注意
用户可对要实现 view
的无 cv 限定的程序定义类型特化 enable_view
为 true ,而对不实现的类型特化为 false 。这些特化应当可用于常量表达式并拥有 const bool
类型。