En programmation, vous pouvez rencontrer des situations dans lesquelles vous souhaitez surcharger un opérateur spécifique pour interagir avec vos types de données ou classes personnalisés. Cette question explore un problème qui survient lors d'une tentative de surcharge du << opérateur comme fonction amie pour une classe de modèle.
L'extrait de code fourni déclare une classe de modèle Pair avec deux paramètres de type T et U. Dans cette classe, il y a une tentative de déclarer l'opérateur << opérateur comme fonction amie qui prend un ostream et une instance Pair comme paramètres. Cependant, le compilateur génère un avertissement concernant la déclaration d'une fonction non-modèle, malgré la définition ultérieure d'une fonction modèle pour l'opérateur.
Pour résoudre ce problème, la syntaxe correcte consiste à spécialiser l'instance de modèle pour le < ;&Lt ; opérateur au lieu de le déclarer comme fonction amie générale. Ceci est réalisé en modifiant la déclaration comme suit :
friend ostream& operator<<<> (ostream&, Pair&);
Cette déclaration spécifie qu'une instance de modèle spécialisée du << sera défini pour la classe Pair avec les paramètres de type T et U. Il indique explicitement qu'il s'agit d'une spécialisation et non d'une déclaration générale.
De plus, la recommandation du compilateur d'ajouter <...> après le nom de la fonction dans la déclaration ami n'est pas nécessaire dans ce cas car le compilateur peut déduire les paramètres de type à partir des arguments du modèle dans la définition.
En effectuant ces ajustements, le code sera compilé avec succès. N'oubliez pas que pour la surcharge d'opérateurs dans les modèles, vous devez spécifier explicitement l'instance de modèle à spécialiser, comme indiqué dans la déclaration modifiée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!