Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ 템플릿이 헤더 파일에서만 구현될 수 있는 이유는 무엇입니까?


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)로 인스턴스화하기 위해 이러한 명령문을 만나기 전에 클래스 및 메서드의 구현에 액세스할 수 있어야 합니다. 이러한 템플릿 클래스 구현이 헤더에 없으면 액세스할 수 없으므로 컴파일되지 않습니다.