Spécialisation partielle et typedef de template.
Bonjour,
J'ai une classe template quelconque :
Code:
template<class T>struct ok {};
Je déclare une classe trait :
Code:
template<class T> struct trait;
et je la spécialise pour ma première classe template :
Code:
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:
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:
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:
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 :aie:
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:
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 ?