Tuple기본 사용법에 대한 정리.
#include <iostream>
#include <tuple>
#include <type_traits>
using namespace std;
int main()
{
// Tuple 생성
tuple<string, int, int> tplTest;
// 요쇼에 접근 후 값 할당.
get<0>(tplTest) = "Name";
get<1>(tplTest) = 1;
get<2>(tplTest) = 2;
cout << get<0>(tplTest) << ", " << get<1>(tplTest) << ", " << get<2>(tplTest) << endl; //
// 생성2.
tuple<string, char> tplStr("test", 't');
// 생성3.
auto tplMakeTpl = std::make_tuple(10, 20.5, "Hello World");
// 접근
// Use std::get
// std::get<인덱스>(튜플)
int nNum = get<0>(tplMakeTpl);
double dValue = get<1>(tplMakeTpl);
string strHello = get<2>(tplMakeTpl);
cout << nNum << ", " << dValue << ", " << strHello << endl; //
// std::tie 를 이용한 할당.
int x;
double y;
auto tplNumbers = make_tuple<int, double>(1, 2.2);
tie(x, y) = tplNumbers;
cout << x << ", " << y << endl; //
// 구조적 바인딩 (C++17 이상)
auto tplNumbers2 = make_tuple<int, int, double>(1, 2, 3.3);
auto [num1, num2, dNum1] = tplNumbers2;
cout << num1 << ", " << num2 << ", " << dNum1 << endl; //
// Tuple size.
size_t size = tuple_size<decltype(tplNumbers2)>::value;
cout << "Tuple size: " << size << endl; // Tuple size: 3
// Tuple element type.
using ElementType = tuple_element<1, decltype(tplNumbers2)>::type;
static_assert(is_same< ElementType, int>::value, "Type mismach!");
}
static_assert 에서 타입이 일치하지 않으면 컴파일 타임에 아래와 같이 메시지가 나옴
(VS 2022기준)
error C2338: static_assert failed: 'Type mismach!'