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)

    1. view 개념은 범위 어댑터 파이프라인을 구성하는 데 적합한 의미론적 속성을 가진 range 타입의 요구사항을 지정해요.
    1. enable_view 변수 템플릿은 range가 view인지 여부를 나타내는 데 사용돼요. /*is-derived-from-view-interface*/<T>는 어떤 타입 U에 대해 T가 정확히 하나의 public 기본 클래스 ranges::view_interface<U>를 갖고, 다른 타입 V에 대한 ranges::view_interface<V> 타입의 기본 클래스를 갖지 않을 때만 true예요.

사용자는 cv 한정되지 않은 프로그램 정의 타입에 대해 enable_view를 true로 특수화할 수 있어요.

참고 (Notes)

view는 소유하지 않고 관찰만 하며, 이동 가능하고 복사 불가능한 range예요. view_base에서 파생하거나 enable_view를 특수화해 view로 표시할 수 있어요.

더 알아보기 (Learn more)

cppreference