2011-10-16 11 views
11

C++ 템플릿에서 유효한 템플릿 구문입니까?함수의 템플릿 템플릿 매개 변수

template < template <typename T2> class T> 
void foo() { 

} 
+3

@ChrisLutz, 제 생각에는 'T2'는 선택 사항입니다. – iammilind

+0

@ChrisLutz : 제 생각에는 그렇지 않습니다. http://ideone.com/8jlI5 – Nawaz

+0

@Nawaz - 어딘가에서 읽는 것을 기억합니다. 나는 오늘 그 곳 모든 곳에서 틀린 것처럼 보인다. 내 잘못이야. –

답변

13

예. 유효합니다.

정확히 개의 템플릿 매개 변수를 사용하는 클래스 템플릿에서이 함수를 호출 할 수 있습니다. 코드에서,

foo< A<int> >(); //error 

또한 예를 들어, 당신이없는

template<typename T> 
struct A 
{ 
    //... 
}; 

foo<A>(); //ok 

참고 A 클래스 템플릿, 즉, 다음과 같은 컴파일 오류가 발생할 것의 템플릿 인수를 제공합니다 T2는 선택 사항이며, 사실, 당신은 정의를 간단하게하기 때문에 더 나은 기능의 사용을 제거 할 수 없습니다 :

template < template <typename> class T> 
void foo() { 

    T<int> x; //this is how T can be instantiated; provide template argument! 
} 

데모 : http://ideone.com/8jlI5

+0

이 경우 'T2'와 마찬가지로 항상 선택 사항입니까? 클래스 템플릿에서도 사용할 수 없었습니다. http://ideone.com/LEt6N – user103214

+0

@ user974191 : 예. 절대 필요하지 않습니다. 템플릿 정의에는 사용할 수 없습니다! – Nawaz