반응형
템플릿 인자 타입 추론(Template Argument Type Deduction)
- 사용자가 템플릿 인자를 명시적으로 지정하지 않은 경우 컴파일러가 인자를 보고 추론(deduction)하는 것
- 타입을 결정하는 방식(type deduction rule 참고)
template<typename T> T square(T a)
{
return a * a;
}
int main()
{
square<int>(3);
square(3); // 인자 타입 추론(int)
square(3.3); // 인자 타입 추론(double)
}
클래스 템플릿 인자 타입 추론(Class Template Argument Type Deduction)
- C++ 17부터 지원
- 생성자를 통한 타입 결정
- 사용자가 "user define deduction guide" 제공
#include <list>
using namespace std;
template<typename T> class Vector
{
T* buff;
public:
Vector() {} // #1 타입 추론이 불가능 할경우 유저 정의 추론 가이드 필요
Vector(int sz, T initValue) {}
template<typename C> Vector(C& c) {} // #2 타입 추론이 불가능 할경우 유저 정의 추론 가이드 필요
};
//유저 정의 추론 가이드 제공 필요(user define deduction guide)
Vector()->Vector<int>; // #1 Vector 기본 생성자 호출 시 int로 타입 추론 가이드
template<typename C> Vector(C& c)->Vector<typename C::valuetype >; // #2 int
int main()
{
Vector<int> v1(10, 3);
list<int> s = { 1,2,3 }; // list s = { 1,2,3 }; C++17 Style
Vector v4(s);
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 템플릿 Identity (0) | 2019.05.28 |
---|---|
C++ Idioms/Object Generator (0) | 2019.05.28 |
C++ 템플릿 인스턴스화(Template Instantiation) (0) | 2019.05.21 |
C++ 템플릿(template) 필요성 (0) | 2019.05.21 |
C++ 템플릿(template) 기본 문법 (0) | 2019.05.21 |