2. tuple이 필요할 때
함수의 반환 값으로 2개 이상의 값을 반환할 때
이를 위해 구조체를 만들거나 컨테이너를 사용하는 것은 배보다 배꼽이 더 크다.
3. tuple
#include <tuple> 헤더 파일을 추가한다.
std::tuple<int, std::string, ITEM> UserItem 과 같은 형태로 선언한다.
std::get<>에 저장된 값의 위치를 선언하면 해당 값을 사용할 수 있다.
std::cout << std::get<0>(UserItem) << std::endl;
std::get<0>(UserItem) = 2; 처럼 저장된 값을 변경할 수도 있다.
8. std::bind
std::bind1st와 std::bind2nd를 보다 일반화시킨 함수
임의의 함수, 함수 포인터, 함수 객체, 멤버 함수를 함수 객체로 만들 수 있으며, 원하는 위치에 원하
는 값을 전달시킬 수 있는 함수 객체를 만들어 준다.
#include <functional>
15. 오버로드된 함수가 있을 때
std::bind<return-type>을 지정해주어야 한다.
16. 함수 포인터의 제약 사항
흔히 이벤트가 발생한 상황에 맞게 콜백 함수를 동적으로 다르게 가져가고 싶을 때 함수 포인터를
사용한다.
하지만 함수 포인터는 동일한 시그너쳐를 가지는 함수만 대입시킬 수 있는 한계가 있다.
그리고 오직 함수만 넘길 수 있다는 점도 아쉽다.
그리고 반환 타입이 int 인 함수 포인터에 대입되는 함수들은 반드시 반환 타입이 int여야 한다는 제
약도 있다.
다시 말해 함수 포인터의 반환 타입과 일치하는 반환 타입을 가진 함수만 함수 포인터에 담을 수 있
다.
17. std::function
어떤 함수가 가진 시그니처와 호환되는 시그니처를 갖는 함수 호출성 개체의 표현을 가능하게 해주
는 템플릿이다.
즉, 함수 반환갑 역시 호환이 가능하다면(암시적 형변환이 가능하다면) 사용할 수 있다.
적접한 함수호출성 개체(callable object)라면 사용할 수 있다.