Bonjour,
J'ai une classe template quelconque :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
template<class T>struct ok {};
Je déclare une classe trait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
template<class T> struct trait;
et je la spécialise pour ma première classe template :
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>";
Ca marche :
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;
}
Jusque là tout va bien.
Mais en attendant les alias de template, je fais ça :
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;
};
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 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>";
Je me fais jeter
Citation Envoyé par VCExpress
error C2764: 'T'*: paramètre de modèle non utilisé ou pouvant être déduit dans la spécialisation partielle 'trait<rebind<T>::type>'
Citation Envoyé par MinGW
error: template parameters not used in partial specialization
Je comprend pas pourquoi le code est incorrect. Mais surtout, je vois pas comment contourner sauf à faire :
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>";
car bien sur dans la vraie vie problem<T> est un peu plus compliqué que ça.

Avez-vous des idées/solutions ?