Notice
Recent Posts
Recent Comments
Link
삶의 공유
[C++] 템플릿(Template) - 2 본문
728x90
반응형
*C++ 열혈 프로그래밍 참조 (윤성우 저)
템플릿의 함수의 특수화를 다뤄 보겠다.
먼저 예제부터 들겠다.
#include <iostream>
using namespace std;
template <typename T>
T Max(T a, T b)
{
return a > b ? a : b;
}
int main()
{
cout << Max(11, 15) << endl;
cout << Max('T', 'Q') << endl;
cout << Max(3.5, 7.5) << endl;
cout << Max("Simple", "Best") << endl; // 이렇게 문자열로 호출 할 경우에 대해서는 그 결과에 대해 아무 의미를 부여 할수 없다.
}
만약에 문자열 길이나, 사전 편찬 순서의비교가 목적이라면,
하기의 2개의 함수를 상황에 따라 만들어 써야된다.
const char* Max(const char* a, const char* b) // 문자열 길이의 비교가 목적
{
return strlen(a) > strlen(b) ? a : b;
}
const char* Max(const char* a, const char* b) // 사전 편찬순서 비교 목적
{
return strcmp(a,b) > 0 ? a : b;
}
이렇듯 상황에 따라서 템플릿 함수의 구성방법에 예외를 둘 필요가 있는데. 이 때 사용 되는 것이 '함수 템플릿의 특수화' 이다.
위의 2개의 예제를 함수 템플릿의 특수화를 사용하여 코드 예제를 들어 보겠다.
#include <iostream>
using namespace std;
template <typename T>
T Max(T a, T b)
{
return a > b ? a : b;
}
// 의미 char* 형 함수는 내가 이렇게 제시를 하니, char*형 템플릿 함수가 필요한 경우에는 별도로 만들지 말고 이것을 사용해 !
template <>
char* Max(char* a, char* b) // 문자열 길이의 비교가 목적
{
return strlen(a) > strlen(b) ? a : b;
}
// 의미 const char* 형 함수는 내가 이렇게 제시를 하니, const char*형 템플릿 함수가 필요한 경우에는 별도로 만들지 말고 이것을 사용해 !
template<>
const char* Max(const char* a, const char* b) // 사전 편찬순서 비교 목적
{
return strcmp(a,b) > 0 ? a : b;
}
int main()
{
cout << Max(11, 15) << endl;
cout << Max('T', 'Q') << endl;
cout << Max(3.5, 7.5) << endl;
cout << Max("Simple", "Best") << endl; // const char* Max(const char* a, const char* b) 호출
char str1[] = "Simple";
char str2[] = "Bestthing";
cout << Max(str1, str2) << endl;// char* Max(char* a, char* b) 호출
}
반응형
'Programing > C++' 카테고리의 다른 글
[C++] 정적 결합, 동적 결합 (0) | 2021.01.25 |
---|---|
[C++] 클래스 템플릿 (0) | 2021.01.20 |
[C++] 가상 함수(상속) (0) | 2021.01.18 |
[C++] 템플릿(Template) - 1 (0) | 2021.01.18 |
[C++] 코딩 테스트 개 문제 풀이 (0) | 2021.01.17 |