ranges_view
ranges_view (뷰 개념)
ranges::view은 범위 어댑터 파이프라인을 구성하는 데 적합한 의미론적 속성을 가진 range 타입의 요구사항을 지정하는 개념이에요. C++20부터 사용할 수 있어요.
출처: cppreference
본문
<ranges> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template<class T>
concept view = ranges::range<T> && std::movable<T> && ranges::enable_view<T>;
(1) (since C++20)
template<class T>
constexpr bool enable_view =
std::derived_from<T, view_base> || /*is-derived-from-view-interface*/<T>;
(2) (since C++20)
struct view_base { };
(3) (since C++20)
-
- view 개념은 범위 어댑터 파이프라인을 구성하는 데 적합한 의미론적 속성을 가진 range 타입의 요구사항을 지정해요.
-
- enable_view 변수 템플릿은 range가 view인지 여부를 나타내는 데 사용돼요.
/*is-derived-from-view-interface*/<T>는 어떤 타입 U에 대해 T가 정확히 하나의 public 기본 클래스 ranges::view_interface<U>를 갖고, 다른 타입 V에 대한 ranges::view_interface<V> 타입의 기본 클래스를 갖지 않을 때만 true예요.
- enable_view 변수 템플릿은 range가 view인지 여부를 나타내는 데 사용돼요.
사용자는 cv 한정되지 않은 프로그램 정의 타입에 대해 enable_view를 true로 특수화할 수 있어요.
참고 (Notes)
view는 소유하지 않고 관찰만 하며, 이동 가능하고 복사 불가능한 range예요. view_base에서 파생하거나 enable_view를 특수화해 view로 표시할 수 있어요.