다음을 통해 공유


템플릿 개요

경우에 따라 매개 변수가 있는 형식 라고 하는 서식 함수 및 클래스에서 형식 매개 변수를 기반으로 생성 하는 메커니즘입니다.서식 파일을 사용 하 여 단일 클래스 또는 각 형식에 대해 별도 클래스를 만들 필요 없이 다양 한 종류의 데이터에 실행 되는 함수를 디자인할 수 있습니다.

설명

예를 들어, 템플릿을 사용 하지 않고 최소한의 두 가지 매개 변수를 반환 하는 형식이 안전한 함수를 만들려면 다음과 같이 오버 로드 된 함수 집합을 작성 합니다.

// what_are_templates1.cpp
// compile with: /c
// min for ints
int min( int a, int b ) {
   return ( a < b ) ? a : b;
}

// min for longs
long min( long a, long b ) {
   return ( a < b ) ? a : b;
}

// min for chars
char min( char a, char b ) {
   return ( a < b ) ? a : b;
}

서식 파일을 사용 하 여 단일 함수 템플릿에 이러한 중복을 줄일 수 있습니다.

// what_are_templates2.cpp
// compile with: /c
template <class T> T min( T a, T b ) {
   return ( a < b ) ? a : b;
}

크게 템플릿 소스 코드 크기를 줄일 고 형식 안전성 저하 없이 코드 유연성을 높일 수 있습니다.

두 가지 유형의 서식 있는: 함수 템플릿 및 템플릿 클래스입니다.이전 예제에서 min 함수 서식 파일입니다.클래스 템플릿 매개 변수를 포함 하는 클래스 등입니다.

// what_are_templates3.cpp
template <class T> class A {
   T m_t;
   public:
      A(T t): m_t(t) {} 
      void f(T t);
};

int main() {
   A<int> a(10);
}

템플릿이 선언 되 고 약간 다른 함수 및 클래스에 몇 가지 주요 차이 같은 정의 합니다.함수 또는 클래스 템플릿 선언이 완전 하 게 정의 하지 않습니다. 이 클래스 또는 함수에 대 한 구문 스 켈 레 톤만 정의합니다.실제 클래스 또는 함수 템플릿을 인스턴스화 라는 프로세스를 통해 생성 됩니다.개별 클래스 또는 생성 된 함수를 인스턴스화할 라고 합니다.예를 들어, 클래스 템플릿:

template <class T> struct A { . . . };

클래스를 인스턴스화하는 데 사용할 수 있습니다 A<int>, A<char>, A<int*>, A<MyClass*>등.

함수나 클래스의 인스턴스화를 명시적으로 또는 암시적으로 수행할 수 있습니다.명시적 인스턴스화를 서식 파일의 버전을 생성 하는 코드에서 호출을 수행 하는 방법입니다.암시적 인스턴스화 템플릿을 처음 사용 되는 지점에 필요할 때 인스턴스화할 수 있습니다.

또한 템플릿 템플릿 매개 변수에 대/소문자 함수를 매개 변수로 다음과 같이 선언 된 값 매개 변수에서 매개 변수화 할 수 있습니다.부동 소수점 형식과 클래스 형식의 값 매개 변수로 사용할 수 없습니다.

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

template <int i> class A {
   int array[i];
public:
   A() { memset(array, 0, i*sizeof(int)); }
};

int main() {
   A<10> a;
}

템플릿 사용 하 여 일반적인 문제 코드가 모든 종류에 적용 된다는 것을 의미 하는 통합형 솔루션을 될 수 있습니다.그런 다음 특정 형식에 대 한 서식 파일의 동작을 사용자 지정 하는 경우 특수화를 사용할 수 있습니다.명시적 특수화를 사용 하 여 서식 파일의 특정 실제 형식에 대해 제네릭 형식은 특수 수 있습니다.클래스 템플릿도 부분적으로, 템플릿을 여러 형식 매개 변수를 사용 해야 하 고 있지만 모든 매개 변수를 기준으로 동작을 사용자 지정 하려는 경우 유용 특수화할 수 있습니다.부분 특수화도 일반 서 실제 템플릿 인수를 실제 인스턴스화된 클래스를 생성할 수 필요 합니다.

참고 항목

기타 리소스

서식 파일