2014-12-17 2 views
0

:부분 아니 전문화 여전히 다음 프로그램을 감안할 때 불완전한 유형

invalid use of incomplete type ‘class A<B<T> >’ 

이 같은 부분 특수화를 계산합니까 :

template <class T> 
class A { 
    void f(); 
}; 

template <class T> 
class B { }; 

template <class T> 
void A<B<T> >::f() { 

} 

내가 오류가? 나는 항상 부분 전문화가 템플릿 매개 변수의 구조체 하위 세트 만 전문화한다고 생각했습니다.

템플릿이있는 유형의 템플릿을 전문적으로 처리 할 수있는 방법이 있습니까?

+0

를 전문으로해야합니다. 따라서 템플릿 매개 변수가있는 경우 완전한 전문화가 될 수 없습니다. 그리고 그것은 일종의 전문성이기 때문에 부분적인 것이되어야합니다. – Angew

+2

이 주제의 중복 수는 압도적입니다. 부분적으로 멤버 함수를 전문화하려고 시도하는 대신에 과부하 해결을해라. (http://coliru.stacked-crooked.com/a/86eaaae17992e574) –

+0

A :: f에 대한 정의를 얻을 수 없다. 그 템플릿에서, 그래서 그것을 부분이라고 부릅니다. – jthill

답변

0

가 부분적으로 하나 개의 멤버 함수를 전문으로 할 수 없습니다, 당신은 비 부분 특수화 템플릿 아닌 학급 전체에게

template <class T> 
class A { 
    void f(); 
}; 

template <class T> 
class B { }; 

template <class T> 
class A<B<T> >{ 
    void f() { /* put here what you need in this special case */}; 
};