본문 바로가기

Programing/C++

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

728x90
반응형

*C++ 열혈 프로그래밍 참조 (윤성우 저)

 

템플릿(Template)에 대한 이해와 함수 템플릿

- 템플릿 : 모형자 라는 뜻이 담겨 있음.

- 1) 모형자(템플릿) 특징 : 모형을 만들어낸다. 모형의 틀언 결정되어 있지만, 모형의 색은 결정해야 된다.

- 2) 함수 템플릿 : 함수를 만들어 낸다. 함수의 기능은 결정 되어 있지만 자료형은 결정되어 있지 않아서 결정 해야된다.

즉 함수 템플릿은 함수를 만드는 도구가 된다.

 

예제를 통해서 같이 확인해 보자

 

#include <iostream>

using namespace std;

// 함수 템플릿 정의
template <typename T> // type name을 대신해서 class를 사용할수도 있다.
T Add(T num1, T num2)
{
    return num1 + num2;
}

int main(void)
{
    cout << Add<int>(15, 20)  << endl;
    // 컴파일러는 위의 문장을 보는 순간 템플릿 함수
    // int Add<int>(int num1, int num2){
    // return num1 + num2; }
    // 을 만든다.

    cout << Add<double>(2.9, 3.7)  << endl;
    // 컴파일러는 위의 문장을 보는 순간 템플릿 함수
    // double Add<double>(int num1, int num2){
    // return num1 + num2; }
    // 을 만든다.

    cout << Add<string>("안녕", "하세요")  << endl;
    // 컴파일러는 위의 문장을 보는 순간 템플릿 함수
    // string Addstring<string>(int num1, int num2){
    // return num1 + num2; }
    // 을 만든다.

    // 컴파일 할때 함수가 만들어지며, 한번 함수가 만들어지면 그 다음 부터는 만들어진 함수를 호출할뿐 새로 함수를 만들지는 않는다.
    // 컴파일 할때 함수가 만들어진다고 하여, 실행속도가 늦어지는 거이 아니다. 단지 컴파일할때의 속도가 느려질뿐...
}

 

정리하면,

함수 템플릿은 "함술르 만드는데 사용되는 템플릿",

템플릿 함수는 "템플릿을 기반으로 만들어진 함수" 이다.

*템플릿 함수는 컴파일러에 의해 생성된 함수 이기 때문에 '생성된 함수' 혹은 '생성된 클래스'라고도 불린다.

 

다음 예제는 둘 이상의 형(Type)에 대핸 템플릿 선언하기.

#include <iostream>

using namespace std;

template <class T1, class T2> // Typename 대신해서 class를 사용한 case
void ShowData(double num) // 매개변수도 기본 자료형으로 선언될수 있다.
{
    cout << (T1)num<< ", " << (T2)num << endl;
}

int main()
{
    // 위의 함수 (ShowData)는 매개 변수 형이 double로선언되었기 때문에 전달되는 인자를 통해 T1, T2의 자료형을 결정짓지 못하기 때문에. 템플릿 함수의 호출 형식을 완전히 갖춰서 호출해야한다.
    ShowData<char, int>(65); //A, 65
    ShowData<char, int>(67); //C, 67
}

 

 

반응형