2012-12-20 3 views
2

내가 가진 말 :템플릿 클래스 전문화

template <typename T> 
void ClassA< ClassB<T> >::doTheStuff (ClassB<T> const * t) 
{ 
    // Stuff done in the same way for all ClassB<T> classes 
} 

그러나 물론 :

template < typename T > 
class ClassA 
{ 
    void doTheStuff (T const * t); 
}; 

template < typename T > 
class ClassB 
{ 
    // Some stuff... 
}; 

나는이 같은 ClassB가 템플릿의 모든 인스턴스에 대한 doTheStuff 방법을 전문으로하고 싶습니다 ,이 작동하지 않습니다. 부끄러움은 내가 어떻게 할 수 있는지 모른다. 비주얼 스튜디오의 컴파일러와

내가 얻을 :

error C2244: 'ClassA<T>::doTheStuff' : unable to match function definition to an existing declaration 
see declaration of 'ClassA<T>::doTheStuff' 
    definition 
    'void ClassA<ClassB<T>>::doTheStuff(const ClassB<T> *)' 
    existing declarations 
    'void ClassA<T>::doTheStuff(const T *)' 

내가이 게시물을 발견 : 권고로 Templated class specialization where template argument is a template

그래서 나는 전체 클래스 전문화를 시도를하지만 작업 중 하나를하지 않습니다

template <> 
template < typename U > 
class ClassA< ClassB<U> > 
{ 
public: 
    void doTheStuff (ClassB<U> const * b) 
    { 
     // Stuff done in the same way for all ClassB<T> classes 
    } 
}; 

Visual :

error C2910: 'ClassA<ClassB<U>>' : cannot be explicitly specialized 

도움을 환영합니다!

플로프.

답변

2

template<>을 제거하면 정상적으로 작동합니다.

+0

감사합니다. 그것은 작동합니까, 나는 왜 그들이이 여분의 템플릿을 다른 스레드에 가지고 있는지 모른다. –