다음을 통해 공유


서식 파일 사양

template 선언 집합을 매개 변수가 있는 클래스 또는 함수를 지정 합니다.

template < template-parameter-list > declaration

설명

템플릿 매개 변수 목록이 형식 수 있습니다 템플릿 매개 변수를 쉼표로 구분 된 목록입니다 (형식에서 클래스식별자, typename식별자, 또는 템플릿 < 템플릿 매개 변수 목록과 > 클래스 식별자) 또는 비형식 매개 변수를 템플릿 본문에 사용할 수 있습니다.다음 중 하나에 대 한 템플릿 매개 변수 구문은 다음과 같습니다.

parameter-declaration
class identifier [ = typename ] 
typename identifier [ = typename ]
template < template-parameter-list > class [identifier][= name]

클래스 템플릿 훨씬 템플릿 인수가 꺾쇠 괄호 안에 포함 되어야 하는 기본 클래스를 인스턴스화하지 처럼 인스턴스화할 수 있는 (< >).템플릿 인수는 클래스 템플릿 인수 목록이 포함 되어 있는 경우 모든 형식이 가능 또는 유형 이름 키워드 또는 인수가 아닌 형식 인수를 경우 해당 형식의 값입니다.템플릿 매개 변수를 함수에 인수를 추론할 수 없으면 꺾쇠 괄호 및 템플릿 인수가 필요할 수 있지만 특수 한 구문이 함수 템플릿을 호출 해야 합니다.

해당 템플릿 매개 변수 목록과 다음 코드 부분에 따라 달라 집니다 지정 템플릿 함수에서 사용 하는 매개 변수 목록입니다.예를 들면 다음과 같습니다.

template< class T, int i > class MyStack...

이 경우 템플릿 형식을 받을 수 있습니다 (class T)와 상수 매개 변수 (int i).형식 템플릿을 사용할 T 및 상수 정수 i 인스턴스 생성 시.본문 내에 MyStack 선언을 참조 해야 합니다는 T 식별자입니다.

템플릿 선언 자체 코드를 생성 하지 않습니다. 클래스 패밀리를 지정 하거나 다른 코드에 의해 참조 되는 경우에 함수, 하나 이상의 생성 됩니다.

템플릿 선언 된 전역, 네임 스페이스 또는 클래스 범위.이러한 함수 내에서는 선언할 수 없습니다.

다음은, 정의 선언과 인스턴스화 클래스 템플릿 형식 매개 변수를 보여 줍니다. T 및 비형식 템플릿 매개 변수 i.

// template_specifications1.cpp
template <class T, int i> class TestClass 
{
public:
   char buffer[i];
   T testFunc(T* p1 );
};

template <class T, int i>
T TestClass<T,i>::testFunc(T* p1) 
{
    return *(p1++)
};

// To create an instance of TestClass
TestClass<char, 5> ClassInst;
int main()
{
}

형식 없는 템플릿 인수

형식 없는 템플릿 매개 변수 멤버 형식에 대 한 포인터, 포인터, 정수, 참조 또는 열거형 이어야 합니다 및 컴파일 타임 상수 여야 합니다.Const 또는 volatile 형식 이름으로 한정 된 수 있습니다.부동 소수점 값으로 템플릿 매개 변수를 사용할 수 없습니다.이러한 개체에 대 한 포인터를 사용할 수 있지만 개체의 클래스, 구조체 또는 공용 구조체 형식의 형식 없는 템플릿 매개 변수로 사용할 수 없습니다.비형식 템플릿 매개 변수에 대 한 포인터 변환 됩니다 배열을 전달 합니다.비형식 매개 변수로 전달 된 함수는 함수 포인터로 간주 됩니다.문자열 리터럴 템플릿 매개 변수로 사용할 수 없습니다.

템플릿 선언에서는 typename을 사용 하 여

typename 키워드는 템플릿 매개 변수 목록에 사용할 수 있습니다.다음 템플릿 선언은 동일합니다.

template< class T1, class T2 > class X...
template< typename T1, typename T2 > class X...

템플릿 매개 변수에 대 한 기본 인수

클래스 템플릿의 기본 인수를 사용 하 여 지정 된 가질 수는 = 기호 뒤에 기본 유형 또는 값으로.함수 템플릿의 기본 인수를 가질 수 없습니다.자세한 내용은 클래스 템플릿의 기본 인수 .:

template<typename Type> class allocator {};
template<typename Type, 
   typename Allocator = allocator<Type> > class stack 
{
};
stack<int> MyStack;

템플릿 매개 변수를 다시 사용

템플릿 매개 변수 템플릿 매개 변수 목록에서 다시 사용할 수 있습니다.예를 들어, 다음 코드를 사용할 수 있습니다.

// template_specifications2.cpp

class Y 
{
};
template<class T, T* pT> class X1 
{
};
template<class T1, class T2 = T1> class X2 
{
};

Y aY;

X1<Y, &aY> x1;
X2<int> x2;

int main()
{
}

템플릿 템플릿 매개 변수로

템플릿 매개 변수는 템플릿 수 있습니다.이 구문 인수 자체 템플릿, 서식 파일에서 생성 된 클래스가 없습니다 되어 있어야 함을 의미 합니다.다음 예제는 이름 A 사용할 수 있는 방법이 없으므로 템플릿 매개 변수 템플릿 매개 변수를 생략할 수 있습니다.

// template_specifications3.cpp
#include <stdio.h>

template <class T> struct str1
{
   T t;
};

template <template<class A> class T> struct str2
{
    T<int> t;
};

int main()
{
    str2<str1> mystr2;
    mystr2.t.t = 5;
    printf_s("%d\n", mystr2.t.t);
}

x5w1yety.collapse_all(ko-kr,VS.110).gifOutput

5

템플릿 매개 변수 참조

Visual Studio.Net 참조 형식 없는 템플릿 매개 변수로 사용할 수 있는 기능을 도입 했습니다.이전 버전에서는 허용 되지 않습니다.

// references__supported_as_nontype_template_parameters.cpp
#include <stdio.h>

extern "C" int printf_s(const char*,...);
template <int & ri> struct S
{
   S()
   {
      printf_s("ri is %d\n", ri);
   }

   ~S()
   {
      printf_s("ri is %d\n", ri);
   }
};

int i = 1;

int main()
{
   S<i> s;
   i = 0;
}

x5w1yety.collapse_all(ko-kr,VS.110).gifOutput

ri is 1
ri is 0

중첩 된 템플릿 인스턴스

Visual Studio Visual Studio 2005 이전에 버전 중첩 된 템플릿 인스턴스가 선언 된 때 템플릿 매개 변수 목록 간에 해당 공백을 삽입할 필요 합니다.다음 구문은 지금 사용할 수 있습니다.

// template_specifications4.cpp 

template <typename T> 
class A
{
};

template <int n> 
class B 
{
};

int main() 
{
   A<B<22>>();
}

참고 항목

참조

C + + 키워드

기타 리소스

서식 파일