Spécialisation de modèle C ++ de la fonction: “utilisation illégale d'arguments de modèle explicite”

StackOverflow https://stackoverflow.com/questions/1416345

Question

Le code de spécialisation de modèle suivant:

template<typename T1, typename T2>
void spec1()
{

}

Cas de test 1:

template< typename T1> //compile error
void spec1<int>()
{

}

Cas de test 2:

template< typename T2> //compile error
void spec1<int>()
{

}

génère l'erreur de compilation suivante:

  

erreur C2768: 'spec1': utilisation illégale d'arguments de modèle explicite

Quelqu'un sait-il pourquoi?

Était-ce utile?

La solution

Les modèles de fonction ne peuvent pas être partiellement spécialisés, mais pleinement, c.-à-d. comme cela:

template<>
void spec1<char, int>()
{

}

Pour savoir pourquoi les modèles de fonction ne peuvent pas être partiellement spécialisés, vous pouvez lire ceci .

Lorsque vous vous spécialisez partiellement (uniquement pour les cours), vous devez le faire comme suit:

template <typename T1>
class class1<T1, int>
{

};

vous devez donc répertorier à nouveau T1 .

La manière dont vos spécialisations sont écrites serait ambiguë pour spec1 < int, int > .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top