///////////////////////////////////////////////////////////////
// 09. tuple( std::tuple ) Example
// * C++11에 새롭게 추가, C++11 이전의 컴파일러는 지원을 하지 않음
// * C++11 이전 컴파일러에서는 '-std=c++11' or '-std=gnu++11' 컴파일 옵션을 추가해야 함
// * 가장 일반적인 형태는 함수의 반환값으로 사용
// * 여러개의 반환값을 하나의 tuple로 묶어사용하여 다수의 값 또는 객체를 반환할 수 있다.
///////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <tuple>
std::tuple<double, char, std::string> get_student(int id) //<<-- 리턴값을 tuple로 함
{
//여러개의 리턴값을 tuple로 만들어 주는 함수( make_tuple )
if (id == 0) return std::make_tuple(3.8, 'A', "Lisa Simpson");
if (id == 1) return std::make_tuple(2.9, 'C', "Milhouse Van Houten");
if (id == 2) return std::make_tuple(1.7, 'D', "Ralph Wiggum");
throw std::invalid_argument("id"); //<<--- 인자값을 검사하는 throw/catch 구문
}
int main()
{
auto student0 = get_student(0);
std::cout << "ID: 0, "
<< "GPA: " << std::get<0>(student0) << ", "
<< "grade: " << std::get<1>(student0) << ", "
<< "name: " << std::get<2>(student0) << '\n';
double gpa1;
char grade1;
std::string name1;
//tuple로 리턴한 값들을 tie 객체를 써서 각각의 변수에 대입
std::tie(gpa1, grade1, name1) = get_student(1);
std::cout << "ID: 1, "
<< "GPA: " << gpa1 << ", "
<< "grade: " << grade1 << ", "
<< "name: " << name1 << '\n';
}
cpp11_tuple.cpp