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