728x90
1. 함수 템플릿은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다.
template <typename T> //T라는 이름을 이용해서 아래의 함수를 템플릿으로 정의한다.
T Add(T num1, T num2)
{
return num1 + num2;
}
template <typename T> = template <class T>
자동 형변환해주는 것을 볼 수 있음.
한 번 함수가 만들어지면, 그 다음에는 만들어진 함수를 호출할 뿐, 새로운 함수를 만들지는 않음.
12, 13행에서 함수가 만들어지면, 14,15행에서 문장을 컴파일할 때는 앞서 만들어놓은 두 함수를 호출할 뿐임
즉, 함수는 자료형 당 하나만 만들어짐.
자료형을 붙이지 않으면 자동으로 자료형을 할당해줌
'함수 템플릿': 앞서 보인 다음의 정의와 같은 것
template <typename T>
T Add(T num1, T num2)
{
return num1 + num2;
}
'템플릿 함수': 위의 템플릿을 기반으로 컴파일러가 만들어내는 유형의 함수들
int Add<int>(int num1, int num2)
{
return num1 + num2;
}
double Add<double>(double num1, double num2)
{
return num1 + num2;
}
2.둘 이상의 형에 대해 템플릿 선언하기
쉼표를 이용해서 둘 이상의 템플릿 타입 명시 가능!
3.함수 템플릿의 특수화
상황에 따라서 템플릿 함수의 구성방법에 예외를 둘 필요가 있을 때 사용됨.
#include <iostream>
#include <cstring>
using namespace std;
template<typename T>
T Max(T a, T b)
{
return a > b? a: b;
}
template <>
char* Max(char* a, char* b)
{
cout << "char* Max<char *>(char* a, char* b)" << endl;
return strlen(a) > strlen(b) ? a: b;
}
template <>
const char* Max(const char* a, const char* b)
{
cout << "const char* Max<const char *>(const char* a, const char* b)" << endl;
return strcmp(a, b) > 0 ? a: b;
}
int main(void)
{
cout << Max(11, 15) << endl;
cout << Max('T', 'Q') << endl;
cout << Max(3.5, 7.5) << endl;
cout << Max("Simple", "Best") << endl;
char str1[] = "Simple";
char str2[] = "Best";
cout << Max(str1, str2) << endl;
return 0;
}
char* 형 함수는 내가 이렇게 제시를 하니, const char*형 템플릿 함수가 필요한 경우에는 별도로 만들지 말고 이것을 써라!
728x90
'LANG > C++' 카테고리의 다른 글
[C++]15-1.예외상황과 예외처리의 이해 (0) | 2023.05.26 |
---|---|
[C++]13-2.클래스 템플릿(Class Template) (0) | 2023.05.26 |
[C++]12-2.문자열 처리 클래스의 정의 (0) | 2023.05.23 |
[C++]12-1.C++의 표준과 표준 string 클래스 (0) | 2023.05.23 |
[C++]10-4.cout, cin 그리고 endl의 정체 (0) | 2023.05.18 |