명시적 인스턴스화

명시적 인스턴스화를 통해 코드에서 실제로 사용하지 않고 템플릿 기반 클래스 또는 함수의 인스턴스를 만들 수 있습니다. 배포에 템플릿을 사용하는 라이브러리(.lib) 파일을 만들 때 유용하기 때문에 입증되지 않은 템플릿 정의는 개체(.obj) 파일에 포함되지 않습니다.

예제

이 코드는 변수 및 6개 항목에 대해 int 명시적으로 인스턴스화 MyStack 합니다.

template class MyStack<int, 6>;

이 명령문은 개체에 대한 스토리지 없이 MyStack의 인스턴스를 만듭니다. 모든 멤버에 대한 코드가 생성됩니다.

다음 줄은 생성자 멤버 함수만 명시적으로 인스턴스화합니다.

template MyStack<int, 6>::MyStack( void );

함수 템플릿 인스턴스화의 예제 와 같이 특정 형식 인수를 사용하여 함수 템플릿을 명시적으로 인스턴스화하여 다시 묶을 수 있습니다.

키워드(keyword) 사용하여 extern 멤버의 자동 인스턴스화를 방지할 수 있습니다. 예시:

extern template class MyStack<int, 6>;

마찬가지로 특정 멤버를 외부 및 인스턴스화되지 않음으로 표시할 수 있습니다.

extern template MyStack<int, 6>::MyStack( void );

키워드(keyword) 사용하여 extern 컴파일러가 둘 이상의 개체 모듈에서 동일한 인스턴스화 코드를 생성하지 못하도록 할 수 있습니다. 함수가 호출되는 경우 하나 이상의 연결된 모듈에서 지정된 명시적 템플릿 매개 변수를 사용하여 함수 템플릿을 인스턴스화해야 합니다. 그렇지 않으면 프로그램을 빌드할 때 링커 오류가 발생합니다.

참고 항목

extern 특수화의 키워드(keyword) 클래스 본문 외부에 정의된 멤버 함수에만 적용됩니다. 클래스 선언 내에 정의된 함수는 인라인 함수로 간주되며 항상 인스턴스화됩니다.

참고 항목

함수 템플릿