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
도움을 환영합니다!
플로프.
감사합니다. 그것은 작동합니까, 나는 왜 그들이이 여분의 템플릿을 다른 스레드에 가지고 있는지 모른다. –