프로그래밍/C++

#52. 함수 템플릿

코딩하는상후니 2022. 7. 20. 22:11

 


 
* 템플릿  :  함수나 클래스를 찍어내는 툴
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