subrange_tuple_size

subrange_tuple_size (subrange 튜플 크기)

std::tuple_sizestd::ranges::subrange에 대한 부분 특수화는 튜플 같은 문법으로 subrange의 성분 개수(항상 2)를 컴파일 타임에 얻는 방법을 제공해요. C++20부터 사용할 수 있어요.

출처: cppreference

본문

<ranges> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.

template< class I, class S, ranges::subrange_kind K >
struct tuple_size<ranges::subrange<I, S, K>>
    : std::integral_constant<std::size_t, 2> { };

(since C++20)

std::tuple_sizestd::ranges::subrange에 대한 부분 특수화는 튜플 같은 문법으로 subrange의 성분 개수(항상 2)를 컴파일 타임에 얻는 방법을 제공해요. 구조적 바인딩 지원을 위해 제공돼요.

std::integral_constant에서 상속

멤버 상수 (Member constants)

  • value [static] — 상수 값 2

멤버 함수 (Member functions)

  • operator std::size_t — 객체를 std::size_t로 변환, value 반환
  • operator() (C++14) — value 반환

멤버 타입 (Member types)

타입 정의
value_type std::size_t
type std::integral_constant<std::size_t, value>

예제 (Example)

이 코드를 실행해 봐요.

#include <array>
#include <cassert>
#include <iterator>
#include <print>
#include <ranges>

int main()
{
    static_assert(2 == std::tuple_size_v<std::ranges::subrange<int*, int*>>);

    using array5 = std::array<int, 5>;
    static_assert(2 == std::tuple_size<std::ranges::subrange<
        array5::const_iterator, array5::const_iterator>>{});

    constexpr array5 a{1, 2, 3, 4, 5};
    std::ranges::subrange sub_a1{a};
    std::println("sub_a1: {}", sub_a1);

    std::ranges::subrange sub_a2{std::next(cbegin(a)), std::prev(cend(a))};
    std::println("sub_a2: {}", sub_a2);
}

더 알아보기 (Learn more)

cppreference