다음을 통해 공유


클래스 템플릿의 명시적 특수화

클래스 템플릿은 특정 유형 또는 값 템플릿 인수를 특수화할 수 있습니다.특수화 템플릿 코드를 특정 인수 형식 또는 값에 대 한 사용자 지정할 수 있습니다.특수화 하지 않고 템플릿 인스턴스화의 사용 되는 각 형식에 대 한 코드가 생성 됩니다.특정 형식을 사용할 경우 특수화에 대신 원래 템플릿을 정의 특수화에 대 한 정의가 사용 됩니다.특수화의 특수화 된 템플릿 이름이 같은 있습니다.그러나 템플릿 특수화 원본 템플릿에서 여러 면에서 다를 수 있습니다.예를 들어, 데이터 멤버 및 멤버 함수는 있을 수 있습니다.

특정 유형 또는 값에 대 한 템플릿을 사용자 지정 하려면 특수화를 사용 합니다.부분 특수화 템플릿 템플릿 인수가 둘 이상 있습니다 그 중 하나를 전문적으로 할 때 전체 집합 형식, 포인터 형식, 참조 형식 또는 배열 형식에 대 한 동작을 전문적으로 할 경우 사용 합니다.자세한 내용은 클래스 템플릿 중 특화 부분.

예제

// explicit_specialization1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

// Template class declaration and definition
template <class T> class Formatter
{
   T* m_t;
public:
   Formatter(T* t) : m_t(t) { }
   void print()
   {
      cout << *m_t << endl;
   }
};

// Specialization of template class for type char*
template<> class Formatter<char*>
{
   char** m_t;
public:
   Formatter(char** t) : m_t(t) { }
   void print()
   {
      cout << "Char value: " << **m_t << endl;
   }
};

int main()
{
   int i = 157;
   // Use the generic template with int as the argument.
   Formatter<int>* formatter1 = new Formatter<int>(&i);

   char str[10] = "string1";
   char* str1 = str;
   // Use the specialized template.
   Formatter<char*>* formatter2 = new Formatter<char*>(&str1);

   formatter1->print();
   formatter2->print();
}
  

참고 항목

참조

클래스 템플릿 인스턴스화

(C + +) 클래스 템플릿의 부분 특수화