tuple_forward_as_tuple

tuple_forward_as_tuple (인자 전달용 참조 튜플 생성)

이 함수는 인자들을 함수에 전달(forward)하기에 적합한 참조 튜플을 생성해요. 인자로 전달된 값이 우측값이면 우측값 참조 데이터 멤버를, 그 외에는 좌측값 참조 데이터 멤버를 갖는 std::tuple을 만들어 주지요. 함수에 인자를 그대로 전달하고 싶을 때 유용하게 사용할 수 있어요.

출처: cppreference

본문

정의

<tuple> 헤더에 정의됨
template < class ... Types > std :: tuple < Types && ... > forward_as_tuple ( Types && ... args ) noexcept ; (C++11부터) (C++14부터 constexpr)

args에 전달된 인자들을 함수에 전달하기에 적합한 참조 튜플로 구성해요. 우측값이 인자로 사용되면 튜플은 우측값 참조 데이터 멤버를 갖고, 그 외의 경우에는 좌측값 참조 데이터 멤버를 가져요.

매개변수

| args | - | 튜플을 생성할 0개 이상의 인자 |

반환값

std :: tuple < Types && ... > ( std :: forward < Types > ( args )...)처럼 생성된 std::tuple 객체를 반환해요.

참고 사항

인자가 임시 객체라면 forward_as_tuple은 그 수명을 연장하지 않아요. 따라서 임시 객체는 전체 표현식이 끝나기 전에 반드시 사용해야 해요.

예제

#include <iostream>
#include <map>
#include <string>
#include <tuple>

int main()
{
    std::map<int, std::string> m;

    m.emplace(std::piecewise_construct,
              std::forward_as_tuple(6),
              std::forward_as_tuple(9, 'g'));
    std::cout << "m[6] = " << m[6] << '\n';

    // The following is an error: it produces a
    // std::tuple<int&&, char&&> holding two dangling references.
    //
    // auto t = std::forward_as_tuple(20, 'a');
    // m.emplace(std::piecewise_construct, std::forward_as_tuple(10), t);
}

출력:

m[6] = ggggggggg

같이 보기

make_tuple (C++11) 인자 타입으로 정의된 타입의 튜플 객체를 생성해요 (함수 템플릿)
tie (C++11) 좌측값 참조 튜플을 만들거나 튜플을 개별 객체로 풀어줘요 (함수 템플릿)
tuple_cat (C++11) 여러 튜플을 연결하여 하나의 튜플을 생성해요 (함수 템플릿)
apply (C++17) 튜플의 인자들로 함수를 호출해요 (함수 템플릿)

더 알아보기 (Learn more)

cppreference