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) |
튜플의 인자들로 함수를 호출해요 (함수 템플릿) |