Spécialisation de modèle C ++ de la fonction: “utilisation illégale d'arguments de modèle explicite”
-
06-07-2019 - |
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?
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