2012-12-20 1 views
2

Dire que j'ai:spécialisation de classe modèle avec le paramètre de classe modèle

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

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

J'aimerais spécialiser la méthode doTheStuff pour toutes les instances du modèle ClassB comme celui-ci:

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

Mais bien sûr , ça ne marche pas. Honte, je ne sais pas comment je pourrais faire ça.

Avec le compilateur Visual Studio je reçois:

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 *)' 

Je trouve ce post: Templated class specialization where template argument is a template

donc j'ai essayé la spécialisation complète de classe comme conseillé, mais il ne fonctionne pas non plus:

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 dit:

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

Toute aide bienvenue!

Floof.

Répondre

2

Supprimez le template<> supplémentaire et cela fonctionnera.

+0

Merci! Cela fonctionne, je ne sais pas pourquoi ils avaient ce modèle supplémentaire <> sur l'autre thread. –

Questions connexes