카테고리 없음
템플릿의 특수화 (type마다 다른 연산)
zuyo
2019. 5. 9. 02:11
반응형
#include <iostream>
using namespace std;
template <typename T>
T Max(T a, T b) {
return a > b ? a : b;
}
void main() {
cout << Max(11, 15) << endl;
cout << Max('T', 'Q') << endl;
cout << Max(3.5, 7.5) << endl;
cout << Max("Simple", "Best") << endl;
}
템플릿 함수 Max는 인자로 전달된 두 데이터 중 큰 값을 반환하도록 되어있다.
데이터가 숫자면 정상적으로 동작하지만, 데이터가 문자열일 경우 단순히 주소값의 비교가 되어버리므로 문자열의 비교를 처리할 수 있도록 만들어야 한다.
#include <iostream>
using namespace std;
template <typename T>
T Max(T a, T b) {
return a > b ? a : b;
}
/* 함수 템플릿 Max를 char* 형에 대해서 특수화 */
template <>
char* Max(char* a, char* b) {
cout << "문자열(변수) 길이 비교" << endl;
return strlen(a) > strlen(b) ? a : b;
}
/* 함수 템플릿 Max를 const char* 형에 대해서 특수화 */
template <>
const char* Max(const char* a, const char* b) {
cout << "문자열(상수) 순서 비교" << endl;
return strcmp(a,b) < 0 ? a : b;
}
void main() {
cout << Max(11, 15) << endl;
cout << Max('T', 'Q') << endl;
cout << Max(3.5, 7.5) << endl;
// 변수 형태의 문자열 비교
char str1[] = "Simple";
char str2[] = "Best";
cout << Max(str1, str2) << endl;
// 상수형태의 문자열 비교
cout << Max("Simple", "Best") << endl;
}
반응형