Bonjour,
J'ai une classe template quelconque :
Je déclare une classe trait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part template<class T>struct ok {};
et je la spécialise pour ma première classe template :
Code : Sélectionner tout - Visualiser dans une fenêtre à part template<class T> struct trait;
Ca marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template<class T> struct trait<ok<T> > { static const std::string tell_me; }; template<class T> const std::string trait<ok<T> >::tell_me="ok<T>";
Jusque là tout va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include <iostream> int main() { std::cout<<trait<ok<double> >::tell_me <<std::endl; return 0; }
Mais en attendant les alias de template, je fais ça :
Et lorsque j'essaie de spécialiser partiellement ma classe trait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template<class T> struct problem {}; template<class T> struct rebind { typedef problem<T> type; };
Je me fais jeter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template<class T> struct trait<typename rebind<T>::type > { static const std::string tell_me; }; template<class T> const std::string trait<typename rebind<T>::type >::tell_me="problem<T>";
Envoyé par VCExpress
Je comprend pas pourquoi le code est incorrect. Mais surtout, je vois pas comment contourner sauf à faire :Envoyé par MinGW
car bien sur dans la vraie vie problem<T> est un peu plus compliqué que ça.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template<class T> struct trait<problem<T> >/*<typename rebind<T>::type >*/ { static const std::string tell_me; }; template<class T> const std::string trait<problem<T> >::tell_me="rebind<T>";
Avez-vous des idées/solutions ?
Partager