subrange_tuple_size
subrange_tuple_size (subrange 튜플 크기)
std::tuple_size의 std::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_size의 std::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);
}