'함수 템플릿'에 해당되는 글 1건

  1. 2012.10.23 템플릿 (클래스 템플릿, 함수 템플릿)

템플릿이란?

템플릿은 틀이라는 뜻으로 데이터형에 따라서 유동적으로 사용하기 위한 방법이다. 

클래스 템플릿은 클래스를 만들기위한 틀, 클래스함수는 함수를 만들기 위한 틀이라고 생각하면 될듯하다.


클래스 템플릿

클래스 템플릿은 클래스의 기능의 정의는 되어있으나, 데이터형이 정해져있지 않은 형태이다.

#include<iostream>

 

using namespace std;

 

template <typename T>      //T라는이름에대해템플릿화

class Data {

T data;

public:

Data(T d) {

data=d;

}

 

void SetData(T d) {

data=d;

}

 

T GetData() {

return data;

}

};

 

int main(void) {

Data<int> d1(0);            //Tint로간주하여객체를생성

d1.SetData(10);

Data<char> d2('a');        //Tchar로간주하여객체를생성

 

cout << d1.GetData() << endl;

cout << d2.GetData() << endl//출력값 : 0, a

 

return 0;

}

T라는 이름에 대해서 템플릿화를 하여 클래스를 만들수있는 틀을 만들어두고 클래스 객체를 선언할때 데이터형을 넘김으로서 하나의 클래스로 자료형을 유동적으로 사용이 가능하다. 클래스 템플릿은 객체화가 가능한 클래스를 만들기 위한 틀에 지나지 않는다. 

LIFO특징을 지는 Stack을 구현할때 템플릿을 이용하면 데이터별로 클래스를 만들어주지 않고 템플릿함수를 이용하면 편리하다.


클래스 템플릿의 선언과 정리를 분리할경우 선언문에서 클래스밖에서 아래와같이 정의를 한다.

template <typename T>

Data<T>::T GetData() {

return data;

}


클래스 템플릿의 특수화

Ex) template <> class Stack<char*>{}

특별히 char*타입의 데이터들이 Stack클래스의 템플릿 인자로 전달되었을때만 사용되는 특수회된 템플릿.



함수 템플릿

함수 템플릿은 자료형만 정해지지 않은 함수를 말한다. 함수의 기능은 정해져있지만 리턴값, 인자로 넘어가는 데이터등의 자료형이 정해져있지 않은경우 함수 템플릿이라고 한다.

#include<iostream>

 

using namespace std;

 

template <typename T1, typename T2>

void ShowData(T1 a, T2 b) {

cout << a << endl;

cout << b << endl;

}

 

int main(void) {

int a=10;

char b='a';

 

ShowData(a, b);              //함수매개변수의타입으로유추하여생성

ShowData<int, char>(a, b); //명시시적으로처리하려는데이터의타입을인자로넘김

}


함수 템플릿의 특수화

Ex) 

template<> int SizeOf(char* a) {    //함수 템플릿 특수화 선언!

return strlen(a);

}

전달 인자가 char*인경우에는 이 함수를 수행한다.



소스코드

ClassTemplete.cpp


FuctionTemplate.cpp


Posted by No names
,