* 템플릿 : 함수나 클래스를 찍어내는 툴
1. 함수 템플릿
2. 클래스 템플릿
*함수 템플릿
void Print(int a)
{
cout << a << endl;
}
....
=> 무한정 오버로딩한다면, 낭비
template<typename T>
void Print(T a)
{
cout << a << endl;
}
Print(1);
Print("Test");
=> T 의 타입을 컴파일러가 알아서 '추론' 한다.
Print<double>(1.0/3);
=> < > 로 타입을 지정 가능.
template<typename T>
T Add(T A, T B)
{
return A + B;
}
template<typename T1, typename T2, typename T3>
T3 Add(T1 A, T2 B)
{
return A + B;
}
=> int result = Add<double, float, int>(10.5, 1.0f);
int result = Add(10.5, 1.0f); => ( ERROR )
=> 타입 지정해줘야함.
*템플릿 특수화
=> 특정 매개변수를 별도로 처리하고 싶을 때 사용.
template<typename T>
void Print(T a)
{
cout << a << endl;
}
template<>
void Print(Knight a)
{
cout << "Knight !!!!!" << endl;
cout << a << endl;
}
=> 템플릿 특수화에서 중요한것은,
위 특수화할 템플릿 형식과 정확히 일치해야함.
( T ) -> ( Knight )
( T& ) -> ( Knight& )
( const T& ) -> ( const Knight& )
=> 그렇지 않으면, '명시적'으로 선언해주어야 동작함.
void Print(T a);
void Print(const Knight& a);
Knight k1;
Knight* k2 = new Knight();
Print<const Knight&>(*k2); // 명시적
본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다.
'프로그래밍 > C++' 카테고리의 다른 글
#54. 콜백함수 (0) | 2022.07.20 |
---|---|
#53. 클래스 템플릿 (0) | 2022.07.20 |
#51. 함수 객체 (0) | 2022.07.20 |
#50. 함수 포인터 (0) | 2022.07.20 |
#49. 전방 선언 (0) | 2022.07.20 |