반응형
- C++17 이전까지는 클래스 템플릿은 함수 인자를 통해 타입을 추론 할 수 없기 때문에, 클래스 템플릿 사용이 복잡하고 불편함
- "클래스 템플릿의 객체를 생성하는 함수 템플릿"을 사용
- 함수 템플릿은 함수 인자를 통해서 컴파일러가 추론(Argument Type Deduction)할 수 있는 특징 활용 기법
- make_pair(), make_tuple()등의 make 계열 함수, STL 삽입반복자등
#include <iostream>
template<typename T> void foo(T a) {}
template<typename T, typename U> struct pair
{
T first;
U second;
pair(const T& a, const U& b) : first(a), second(b) {}
};
template<typename T, typename U>
pair<T, U> make_pair(const T& a, const U& b)
{
return pair<T, U>(a, b);
}
int main()
{
pair<int, double> p(1, 3.4);
foo(p);
foo(pair<int, double>(1, 3.4)); // 클래스 템플릿은 꼭 타입 전달 필요
foo(make_pair(1, 3.4)); // 함수 템플릿으로 타입 추론하여 클래스 객체 생성
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 템플릿 주의사항/template instantiation (0) | 2019.05.28 |
---|---|
C++ 템플릿 Identity (0) | 2019.05.28 |
C++ 템플릿 타입 추론(Template Argument Type Deduction) (0) | 2019.05.21 |
C++ 템플릿 인스턴스화(Template Instantiation) (0) | 2019.05.21 |
C++ 템플릿(template) 필요성 (0) | 2019.05.21 |