클래스 템플릿 인스턴스화
함수 템플릿와는 달리, 클래스 템플릿 인스턴스화 클래스 템플릿 인수를 지정 하 여 클래스를 명시적으로 인스턴스화 해야 합니다.인스턴스를 만들려면 TempClass:
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
클래스 또는 함수를 인스턴스화할 때 컴파일러는 템플릿 클래스 또는 함수에 대 한 코드를 생성 합니다.멤버 함수가 호출 되 고 해당 클래스가 생성 될 때 가상 멤버 함수를 인스턴스화할 때 인스턴스화됩니다.다른 사용자가 템플릿 사용 하 여 라이브러리를 작성 하는 경우이 문제가 발생할 수 있습니다.자세한 내용은 명시적 인스턴스화.
클래스 템플릿 특수화 먼저 이며 다음 컴파일러에서 인스턴스화할.이 템플릿 클래스의 멤버에 대 한 참조를 변경, sizeof 클래스를 사용 하는 인스턴스를 만들 때까지 컴파일러 클래스 템플릿을 인스턴스화할 하지 않습니다.
명시적 템플릿 특수화를 특정 형식에 대 한 서식 파일의 사용자 지정된 버전입니다.
// template_instantiation2.cpp
template<class T> class X
{
};
// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}
명시적 특수화 하지 않고 template<> 오류가 발생 합니다.Visual C++ Visual C++ 이전 버전입니다.Net이이 구문을 사용할 수 있습니다:
// Explicit specialization of X with 'char'
class X<char> // C2906
{
};
템플릿을 명시적으로 인스턴스화할 또는 전문화 한 번 경우 수 없습니다 수 명시적으로 인스턴스화 또는 동일한 프로그램에서 두 번 동일한 템플릿 인수의 집합에 대 한 전문.다른 템플릿 인수가 더 이상 특수화를 사용할 수 있습니다.
없는 경우에 명시적으로 인스턴스화할 때 또는 특정 템플릿 인수에 대 한 전문화, 템플릿은 처음 사용 되는 지점에 암시적으로 인스턴스화할 수 있습니다.
같은 서식 파일의 서로 다른 여러 인스턴스화에 여러 가지 종류가 있기 때문에 한 전문화 또는 템플릿 인스턴스화의 정적 멤버 정적 멤버가 동일한 템플릿 인스턴스화 또는 다른 특수화에서 별도 있습니다.