본문 바로가기

Programming/C & C++

[C/C++] 함수 템플릿(Templete)

함수 템플릿 - 함수의 일반화 서술

template <typename T>

void Swap(T &a, T &b)
{

T temp;

temp = a;

a = b;

b = temp;

}


명시적 특수화

  • 함수 이름이 하나 주어지면, 사용자는 템플릿이 아닌 함수, 템플릿 함수, 명식적 특수화 템플릿 함수를 가질수 있다.
  • 명시적 특화를 하기 위한 원형과 정의 앞에 template<>가 와야 한다. 그리고 그 특수형의 이름을 서술해야한다.

Test형 구조체를 교환하는 세 가지 형식의 함수원형

//템플릿이 아닌 함수 원형
void Swap(Test &, Test &);


//템플릿 원형
template <class T>
void Swap(T &, T &);


//Test형을 위한 명시적 특수화
template <> void Swap<Test>(Test &, Test &);


세 가지의 함수가 공존할 때에는
일반함수 > 명시적특수화 > 템플릿 원형
순으로 컴파일러는 선택


구체화와 특수화

- 구체화
컴파일러가 특정 데이터형에 맞는 함수 정의를 생성하기 위해 템플릿을 사용할 때, 그 결과를 템플릿의 구체화(instantiation) 라 한다.

- 암시적 구체화
특정 데이터형 매개변수를 요구하는 함수를 사용한다는 사실을 컴파일러에게 알림으로써 그에 맞는 함수정의를 만들 필요가 있다는 것을 컴파일러가 암시적으로 인식하는 것.


- 명시적 구체화
명시적으로 구체화를 하는 것.

template void Swap<int>(int, int); //int형으로 명시적으로 구체화

 
반응형