C++에서 템플릿을 인스턴스화하면 컴파일러에서 새 클래스를 만듭니다. 이 클래스는 템플릿 인수를 배치한 모든 위치를 사용할 때 전달한 실제 인수로 대체했습니다. 예의 경우 -
template<typename T> class MyClass { T foo; T myMethod(T arg1, T arg2) { // Impl } };
그리고 프로그램의 어딘가에서 이 클래스를 사용합니다.
MyClass<int> x;
컴파일러는 전달하는 모든 형식 인수에 대해 이를 만나면 새 클래스를 만듭니다. 예를 들어, 템플릿 인수가 다른 3개의 객체를 생성했다면 3개의 클래스를 얻게 되며 이는 −
와 동일합니다.class MyClassInt { int foo; int myMethod(int arg1, int arg2) { // Impl } };
그렇게 하기 위해 컴파일러는 템플릿 인수(이 경우 int)로 인스턴스화하기 위해 이러한 명령문을 만나기 전에 클래스 및 메서드의 구현에 액세스할 수 있어야 합니다. 이러한 템플릿 클래스 구현이 헤더에 없으면 액세스할 수 없으므로 컴파일되지 않습니다.