Les paramètres des paramètres de modèle de modèle n'obtiennent pas d'arguments et n'ont donc généralement pas de noms. La spécialisation partielle est l'exception à cette règle. Essayez ceci:
template<class> // Derived<E> is only only parameter
struct X; // but you actually need two parameters, Derived and E
template< template <class> class Derived, class E >
struct X< Derived<E> > // so use partial specialization.
{
static void f()
{
Derived<E>::value; // only reason to want this is to
Derived<int>::value; // use different specializations
}
};
Bien sûr, si vous n'avez pas besoin de re-spécialiser sur Derived<something_else>
, ignorer le fait que Derived<E>
est une spécialisation de modèle:
template<class Derived>
struct X
{
static void f()
{
Derived::value;
}
};
X< my_class<something> > my_x; // a specialized class template is a class
maintenant 'e' est utilisé ... – Potatoswatter
@Potatoswatter: en effet, on peut simplement écrire 'template class Derived>', car le paramètre formel ne va pas être utilisé. – Vlad