2017-02-13 2 views
1

나는 템플릿에 대해 a strange code을 찾았습니다. 템플릿 서명을 두 번 선언하는 것과 같습니다.선언에서 클래스 이름 다음에 <>가 또 있습니까? ... 템플릿 <B,C> 클래스 D <C,B> {}

template <typename Tf, Tf F> 
class Collection; 

template <typename K, typename ... I, HashFunction<K, I...> F> //<-- #B1 
class Collection<HashFunction<K, I...>, F> //<-- <> again!   #B2 
{ /*.......*/ } 

템플릿 (#B1 & #B2)의 선언을 반복의 의미는 무엇입니까?
<>을 두 번 허용하는 C++ 사양은 무엇입니까?
무엇이라고 부릅니까? ... 나는 그것에 대해 더 파고 싶다.
별칭입니까?
일반적으로 어떻게 유용 할 수 있습니까?

cppreference에서 그러한 서명을 찾을 수 없습니다.
최첨단 C++ 구문입니까? //B클래스 템플릿Collectionpartial-specialization 동안

+4

그것 * 클래스 템플릿의 * 부분 전문화 * * – WhiZTiM

+1

^- 필수 링크 http://en.cppreference.com/w/cpp/language/partial_specialization – StoryTeller

+0

@StoryTeller 멋진 와우! 감사. – javaLover

답변

5
// A 
template <typename Tf, Tf F> 
class Collection; 


// B 
template <typename K, typename ... I, HashFunction<K, I...> F> 
class Collection<HashFunction<K, I...>, F> 
{ /*.......*/ } 

//A는 기본 클래스 템플릿Collection입니다. 기본적으로, 당신은 전문으로하고 있습니다 :

template <typename Tf, Tf F> 
class Collection; 

클래스 템플릿에 : HashFunction의 인스턴스화 유형 Collection에 템플릿 인수로 사용하는 경우

template<typename K, typename ... I> 
class HashFunction<K, I...>; 

따라서, 부분 전문화 //B이 선택됩니다 인스턴스화를 위해.


관련 문제