03
16
//int형 스왑 함수
void num_swap(int &a, int &b)
{
	int temp;
    temp = a;
    a  = b;
    b= temp;
}
//float형 스왑 함수
void num_swap(float &a, float &b)
{
	float temp;
    temp = a;
    a = b;
    b = temp;
}

 

위 둘 함수는 매개 변수만 다르고 작동원리는 같다. 

이럴 때 함수나 클래스를 개별적으로 다시 작성하지 않고

다른 수많은 자료형에서 작동하도록 해주는 틀으로서 템플릿을 사용한다.

 

template <typename T>
T num_swap(T &a, T &b)
{
    T temp;
    temp = a;
    a = b;
    b = temp;	
}

// 사용할때는
num_swap<int>(1,2);

 

템플릿 동작 과정

문법 오류 검사, 기계어로 번역하는 작업을 하는 과정, 컴파일에서 템플릿은

무시하고 지나간다. 왜냐하면 초기에 자료형이 정해져 있지 않기 때문이다.

그러다가 함수를 호출하면 자료형에 맞는 일반 함수를 찾다가 

없다면 템플릿 함수를 참조한다. 템플릿으로 원하는 자료형으로 사용 가능하게 하는 

일련의 과정이 있다.

 

클래스 템플릿

위에서 함수를 템플릿으로 만들었듯이, 클래스 또한 템플릿으로 

만들 수 있다. 클래스를 템플릿 변수에 따라 생성할 수 있다.

컨테이너 용도로 많이 씀 

 

템플릿 선언문 class typename 차이

template<class T>
class Object;

template<typename T>
class Object;

 

개인적으로 궁금했던 것인데, 기능상 차이는 없고

typename이 중첩타입을 명시할때만 사용할때 사용하는 특성이 있다.

템플릿의 템플릿을 구현할때 키워드가 구분되어야 함으로 두가지를 혼용해서

쓰기도 하는 것 같다. 

template <template <typename> class    T> class C { }; // valid!

template <template <typename> typename T> class C { }; // invalid!

 

https://stackoverflow.com/questions/2023977/difference-of-keywords-typename-and-class-in-templates

 

Difference of keywords 'typename' and 'class' in templates?

For templates I have seen both declarations: template < typename T > template < class T > What's the difference? And what exactly do those keywords mean in the following example (ta...

stackoverflow.com

 

typename이 더 직관적으로 보이기 때문에 더 선호된다고 한다.

COMMENT