삶의 공유

[C++] 템플릿(Template) - 2 본문

Programing/C++

[C++] 템플릿(Template) - 2

dkrehd 2021. 1. 19. 06:02
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