달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

///////////////////////////////////////////////////////////////

// 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


'karma( 업 ) > C_C++' 카테고리의 다른 글

C/C++ 프로그래밍을 잘하려면  (0) 2020.02.04
*& reference to pointer  (0) 2018.12.03
02. 범위기반 for문( C++11으로 가자 )  (0) 2018.11.01
01. auto( C++11으로 가자 )  (0) 2018.11.01
01. C++11의 특징( C++11으로 가자 )  (0) 2018.11.01
Posted by 생짜
|