Namespaces
Variants

Standard library header <tuple> (C++11)

From cppreference.net
Standard library headers

이 헤더는 범용 유틸리티 라이브러리의 일부입니다.

목차

Includes

(C++20)
3-way 비교 연산자 지원

클래스

(C++11)
서로 다른 타입의 요소들을 보관하는 고정 크기 컨테이너를 구현
(클래스 템플릿)
(C++11)
튜플과 유사한 타입의 요소 개수를 구함
(클래스 템플릿)
튜플과 유사한 타입의 요소 타입들을 획득함
(클래스 템플릿)
tuple 의 크기를 구함

(클래스 템플릿 특수화)

지정된 요소의 타입을 얻음
(클래스 템플릿 특수화)
std::uses_allocator 타입 특성의 특수화
(클래스 템플릿 특수화)

상수

(C++11)
tuple 을 언패킹할 때 요소를 건너뛰기 위한 플레이스홀더, tie 사용 시
(상수)

함수

(C++11)
인자 타입들로 정의된 타입의 tuple 객체를 생성함
(함수 템플릿)
(C++11)
lvalue 참조의 tuple 을 생성하거나 튜플을 개별 객체로 언패킹합니다
(함수 템플릿)
전달 참조 tuple 을 생성한다
(함수 템플릿)
(C++11)
임의의 개수의 tuple 을 연결하여 tuple 을 생성합니다
(함수 템플릿)
튜플의 지정된 요소에 접근
(함수 템플릿)
(C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20)
튜플 내의 값들을 사전식으로 비교합니다
(함수 템플릿)
std::swap 알고리즘을 특수화함
(함수 템플릿)
(C++17)
인수 튜플을 사용하여 함수를 호출합니다
(함수 템플릿)
인수 튜플로 객체를 생성합니다
(함수 템플릿)

시놉시스

#include <compare>
namespace std {
  // 클래스 템플릿 tuple
  template<class... Types>
    class tuple;
  // tuple creation functions
  inline constexpr /* 미지정 */ ignore;
  template<class... TTypes>
    constexpr tuple<unwrap_ref_decay_t<TTypes>...> make_tuple(TTypes&&...);
  template<class... TTypes>
    constexpr tuple<TTypes&&...> forward_as_tuple(TTypes&&...) noexcept;
  template<class... TTypes>
    constexpr tuple<TTypes&...> tie(TTypes&...) noexcept;
  template<class... 튜플>
    constexpr tuple<CTypes...> tuple_cat(Tuples&&...);
  // 인수 튜플로 함수 호출하기
  template<class F, class Tuple>
    constexpr decltype(auto) apply(F&& f, Tuple&& t);
  template<class T, class Tuple>
    constexpr T make_from_tuple(Tuple&& t);
  // tuple 헬퍼 클래스들
  template<class T> struct tuple_size;                  // 정의되지 않음
  template<class T> struct tuple_size<const T>;
  template<class... Types> struct tuple_size<tuple<Types...>>;
  template<size_t I, class T> struct tuple_element;     // 정의되지 않음
  template<size_t I, class T> struct tuple_element<I, const T>;
  template<size_t I, class... Types>
    struct tuple_element<I, tuple<Types...>>;
  template<size_t I, class T>
    using tuple_element_t = typename tuple_element<I, T>::type;
  // 요소 접근
  template<size_t I, class... Types>
    constexpr tuple_element_t<I, tuple<Types...>>& get(tuple<Types...>&) noexcept;
  template<size_t I, class... Types>
    constexpr tuple_element_t<I, tuple<Types...>>&& get(tuple<Types...>&&) noexcept;
  template<size_t I, class... Types>
    constexpr const tuple_element_t<I, tuple<Types...>>&
      get(const tuple<Types...>&) noexcept;
  template<size_t I, class... Types>
    constexpr const tuple_element_t<I, tuple<Types...>>&&
      get(const tuple<Types...>&&) noexcept;
  template<class T, class... Types>
    constexpr T& get(tuple<Types...>& t) noexcept;
  template<class T, class... Types>
    constexpr T&& get(tuple<Types...>&& t) noexcept;
  template<class T, class... Types>
    constexpr const T& get(const tuple<Types...>& t) noexcept;
  template<class T, class... Types>
    constexpr const T&& get(const tuple<Types...>&& t) noexcept;
  // 관계 연산자
  template<class... TTypes, class... UTypes>
    constexpr bool operator==(const tuple<TTypes...>&, const tuple<UTypes...>&);
  template<class... TTypes, class... UTypes>
    constexpr common_comparison_category_t</*synth-three-way-result*/<TTypes, UTypes>...>
      operator<=>(const tuple<TTypes...>&, const tuple<UTypes...>&);
  // allocator 관련 traits
  template<class... Types, class Alloc>
    struct uses_allocator<tuple<Types...>, Alloc>;
  // 특수화된 알고리즘
  template<class... Types>
    constexpr void
      swap(tuple<Types...>& x, tuple<Types...>& y) noexcept(/* 설명 참조 */);
  // tuple 헬퍼 클래스들
  template<class T>
    inline constexpr size_t tuple_size_v = tuple_size<T>::value;
}
// deprecated
namespace std {
  template<class T> class tuple_size<volatile T>;
  template<class T> class tuple_size<const volatile T>;
  template<size_t I, class T> class tuple_element<I, volatile T>;
  template<size_t I, class T> class tuple_element<I, const volatile T>;
}

클래스 템플릿 std::tuple

namespace std {
  template<class... Types>
  class tuple {
  public:
    // tuple construction
    constexpr explicit(/* 설명 참조 */) tuple();
    constexpr explicit(/* 설명 참조 */)
      tuple(const Types&...);         // sizeof...(Types) >= 1인 경우에만
    template<class... UTypes>
      constexpr explicit(/* 설명 참조 */)
        tuple(UTypes&&...);           // sizeof...(Types) >= 1인 경우에만
    tuple(const tuple&) = default;
    tuple(tuple&&) = default;
    template<class... UTypes>
      constexpr explicit(/* 설명 참조 */) tuple(const tuple<UTypes...>&);
    template<class... UTypes>
      constexpr explicit(/* 설명 참조 */) tuple(tuple<UTypes...>&&);
    template<class U1, class U2>
      constexpr explicit(/* 설명 참조 */)
        tuple(const pair<U1, U2>&);   // sizeof...(Types) == 2인 경우에만
    template<class U1, class U2>
      constexpr explicit(/* 설명 참조 */)
        tuple(pair<U1, U2>&&);        // sizeof...(Types) == 2인 경우에만
    // allocator-extended constructors
    template<class Alloc>
      constexpr explicit(/* 설명 참조 */)
        tuple(allocator_arg_t, const Alloc& a);
    template<class Alloc>
      constexpr explicit(/* 설명 참조 */)
        tuple(allocator_arg_t, const Alloc& a, const Types&...);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* 설명 참조 */)
        tuple(allocator_arg_t, const Alloc& a, UTypes&&...);
    template<class Alloc>
      constexpr tuple(allocator_arg_t, const Alloc& a, const tuple&);
    template<class Alloc>
      constexpr tuple(allocator_arg_t, const Alloc& a, tuple&&);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* 설명 참조 */)
        tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* 설명 참조 */)
        tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* 설명 참조 */)
        tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* 설명 참조 */)
        tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);
    // 튜플 할당
    constexpr tuple& operator=(const tuple&);
    constexpr tuple& operator=(tuple&&) noexcept(/* 설명 참조 */);
    template<class... UTypes>
      constexpr tuple& operator=(const tuple<UTypes...>&);
    template<class... UTypes>
      constexpr tuple& operator=(tuple<UTypes...>&&);
    template<class U1, class U2>
      constexpr tuple& operator=(const pair<U1, U2>&); // sizeof...(Types) == 2인 경우에만
    template<class U1, class U2>
      constexpr tuple& operator=(pair<U1, U2>&&);      // sizeof...(Types) == 2인 경우에만
    // tuple swap
    constexpr void swap(tuple&) noexcept(/* 설명 참조 */);
  };
  template<class... UTypes>
    tuple(UTypes...) -> tuple<UTypes...>;
  template<class T1, class T2>
    tuple(pair<T1, T2>) -> tuple<T1, T2>;
  template<class Alloc, class... UTypes>
    tuple(allocator_arg_t, Alloc, UTypes...) -> tuple<UTypes...>;
  template<class Alloc, class T1, class T2>
    tuple(allocator_arg_t, Alloc, pair<T1, T2>) -> tuple<T1, T2>;
  template<class Alloc, class... UTypes>
    tuple(allocator_arg_t, Alloc, tuple<UTypes...>) -> tuple<UTypes...>;
}