Namespaces
Variants

std::tuple_cat

cppreference.net에서
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐지)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
교환 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <tuple>
template< class... Tuples >
std::tuple</* CTypes */...> tuple_cat( Tuples&&... args );
에 정의됨 (C++11부터)
(C++14까지)
template< class... Tuples >
constexpr std::tuple</* CTypes */...> tuple_cat( Tuples&&... args );
(C++14부터)
(C++23까지)
template< tuple-like... Tuples >
constexpr std::tuple</* CTypes */...> tuple_cat( Tuples&&... args );
(C++23부터)

args에 있는 모든 튜플을 연결한 튜플을 생성합니다. 반환된 튜플의 요소 타입 /* CTypes */은 std::tuple(C++23까지)tuple-like(C++23부터) 타입인 Tuples의 모든 요소 타입 팩을 순서대로 연결하여 형성됩니다.

std::decay_t<Tuples>...의 모든 타입이 std::tuple의 특수화가 아닌 경우 동작은 정의되지 않습니다. 그러나, 구현체는 튜플 유사 프로토콜을 따르는 타입(예: std::array 및 std::pair)을 지원하도록 선택할 수 있습니다.

(C++23까지)

타입 std::decay_t<Tuples>...은 튜플 유사(tuple-like)하도록 제약됩니다. 즉, 각 타입은 std::tuple 또는 std::array 및 std::pair처럼 tuple-like를 모델링하는 다른 타입의 특수화여야 합니다.

(C++23부터)

/* CTypes */의 타입 중 하나라도 args에서 연결된 요소 시퀀스의 해당 요소 타입으로 생성할 수 없는 경우, 동작은 정의되지 않습니다(C++23까지)프로그램은 ill-formed입니다(C++23부터).

매개변수

args - 연결할 0개 이상의 튜플

반환값

모든 인자 튜플들의 모든 요소들로 구성된 std::tuple 객체는 각 개별 요소에 대해 std :: get < j > ( std:: forward < Ti > ( arg ) ) 로부터 생성됩니다.

예제

#include <iostream>
#include <string>
#include <tuple>
// 임의 크기의 튜플을 출력하는 헬퍼 함수
template<class Tuple, std::size_t N>
struct TuplePrinter
{
    static void print(const Tuple& t)
    {
        TuplePrinter<Tuple, N - 1>::print(t);
        std::cout << ", " << std::get<N-1>(t);
    }
};
template<class Tuple>
struct TuplePrinter<Tuple, 1>
{
    static void print(const Tuple& t)
    {
        std::cout << std::get<0>(t);
    }
};
template<typename... Args, std::enable_if_t<sizeof...(Args) == 0, int> = 0>
void print(const std::tuple<Args...>& t)
{
    std::cout << "()\n";
}
template<typename... Args, std::enable_if_t<sizeof...(Args) != 0, int> = 0>
void print(const std::tuple<Args...>& t)
{
    std::cout << "(";
    TuplePrinter<decltype(t), sizeof...(Args)>::print(t);
    std::cout << ")\n";
}
// 헬퍼 함수 끝
int main()
{
    std::tuple<int, std::string, float> t1(10, "Test", 3.14);
    int n = 7;
    auto t2 = std::tuple_cat(t1, std::make_tuple("Foo", "bar"), t1, std::tie(n));
    n = 42;
    print(t2);
}

출력:

(10, Test, 3.14, Foo, bar, 10, Test, 3.14, 42)

참고 항목

(C++11)
인자 타입들로 정의된 타입의 tuple 객체를 생성함
(함수 템플릿)
(C++11)
lvalue 참조들의 tuple 을 생성하거나 튜플을 개별 객체들로 풀어냄
(함수 템플릿)
전달 참조 들의 tuple 을 생성함
(함수 템플릿)