2012-12-26 4 views

답변

4

인스턴스를 생성 할 때 클래스 템플릿은 클래스가되고 함수 템플릿은 함수가됩니다. 예를 들면 : 당신이 유형에 의해 매개 변수화 된 클래스와 함수 템플릿을 만들 때 여러 가지에서 작동 할 수있는 기능을 만들려는 경우

//Defines a template for a class that can hold two 
//objects. 
template<typename T1, typename T2> 
struct pair { 
    T1 first; 
    T2 second; 
}; 

//Defines a template for a function that gives the 
//minimum of two values. 
template<typename T> 
T min(T a, T b) { 
    return a < b ? a : b; 
} 

정상 코드, 당신은 클래스 템플릿을 사용 유형.

//Deduces the types of T1 and T2, so 
//for example, a pair<int, double> can be created 
//by `make_pair(10, 1.2)` 
template<typename T1, typename T2> 
pair<T1, T2> make_pair(T1&& t1, T2&& t2) { 
    return {std::forward<T1>(t1), std::forward<T2>(t2)}; 
} 

클래스 템플릿 값으로 유형을 사용하여 컴파일 시간에 실행 프로그램 (작성하는 데 사용할 수 있습니다

기능 템플릿은 공장 기능을 만드는 데 유용 할 수 있습니다 타입 추론을 할 수있다 , 패턴 매칭이 순수한 함수로 템플릿 인스턴스화).

//Removes all `const` from a type, for example: 
//`remove_const_recursive<int const*const volatile>::type` 
//is the type `int*volatile`. 
template<typename T> struct remove_const_recursive { typedef T type; }; 
template<typename T> struct remove_const_recursive<T const volatile> { 
    typedef typename remove_const_recursive<T>::type volatile type; 
}; 
template<typename T> struct remove_const_recursive<T volatile> { 
    typedef typename remove_const_recursive<T>::type volatile type; 
}; 
template<typename T> struct remove_const_recursive<T const> { 
    typedef typename remove_const_recursive<T>::type type; 
}; 
template<typename T> struct remove_const_recursive<T&> { 
    typedef typename remove_const_recursive<T>::type& type; 
}; 
template<typename T> struct remove_const_recursive<T*> { 
    typedef typename remove_const_recursive<T>::type* type; 
}; 

당신이 템플릿을 사용할 때

점점 더 많은, 당신은 그들이 다양한 방법으로 사용될 수 있다는 것을 알게 될 것이다 : 이것의 간단한 예는 유형의 모든 const을 제거 클래스 템플릿의 집합입니다. Expression templates을 사용하면 특정 유형의 코드 속도를 높이거나 도메인 특정 언어를 만들 수 있습니다. Template metaprogramming 및 튜플을 사용하여 지루한 다양한 코드를 자동으로 작성할 수 있습니다. 또한 무딘 문법과 제한된 성능 및 템플릿의 의미 론적 힘은 그들이 제공하는 이점보다 항상 더 많은 비용이 들지는 않는다는 것을 의미합니다.

1

함수 템플릿은 인수 유형에서 특수화 유형을 추론합니다.

클래스가 할 수있는 동안 함수 템플릿을 부분적으로 특수화 할 수 없습니다.

클래스가 할 수있는 동안 함수 템플릿은 기본 템플릿 매개 변수를 가질 수 없습니다.

관련 문제