객체에 대한 특정한 변형을 정의하고 이름을 붙인 후 그것을 물리적인 어떤 장소에 위치시키는 드으이 작업을 톻
클래스 템플릿을 클래스로 사용하기 위해서는 instantiate를 해야하고
함수 템플릿을 함수로 사용하기 위해서는 instantiate를 해야한다.
함수 템플릿을 헤더파일로 만들어 선언하는 과정이다.
template<typename T>
void swap(T& x, T& y) {
T temp = x;
x = y;
y = temp;
}
// 함수가 아닌 함수 템플릿이라 자체적으로 컴파일이 안됨.
// 기계어로 만들어지지 않음
template
void swap<int>(int&, int&);
// 명시적인 구체화를 선언
#pragma once
template<typename T>
void swap(T& x, T& y);
template<typename T>
void swap(T& x, T& y) {
T temp = x;
x = y;
y = temp;
}
// 헤더파일에 선언과 구현을 동시에 해주면 된다.
보통의 헤더파일엔 클래스, 함수 등을 선언만 하고 실제 구현은 다른 cpp파일에 하게 되지만 template은 자체적인 함수가 아니기 때문에 컴파일을 하지 못한다.
그러므로 cpp 파일에 구체화를 선언하거나, 헤더파일에 선언과 구현을 동시에 해주어야 한다.