Surcharge de l'opérateur de support d'angle pour une classe de modèles
Essayer de surcharger l'opérateur << opérateur en tant qu'ami d'une classe modèle Pair, on peut rencontrer un avertissement du compilateur indiquant une déclaration de fonction non-modèle. Ce problème survient en raison d'une divergence entre la déclaration d'ami et la définition réelle de la fonction.
Pour résoudre ce problème, il faut spécifier que la déclaration d'ami s'applique à une instance spécialisée de la classe de modèle Paire avec des arguments de modèle spécifiques. Ceci est réalisé en utilisant des équerres vides <> après la déclaration de l'opérateur dans la déclaration ami.
Le code corrigé ressemble à ceci :
<code class="cpp">template <class T, class U> class Pair { public: Pair(T v1, U v2) : val1(v1), val2(v2) {} ~Pair() {} Pair& operator=(const Pair&); friend ostream& operator<<<> (ostream&, Pair<T, U>&); private: T val1; U val2; };</code>
De plus, la définition de fonction pour l'opérateur surchargé doit être déclarée avant la définition de la classe modèle, comme suit :
<code class="cpp">template <class T, class U> ostream& operator<<<> (ostream& out, Pair<T, U>& v); template <class T, class U> class Pair { // ... };</code>
En apportant ces modifications, le compilateur peut identifier correctement la fonction ami en tant que spécialisation pour le modèle Pair et éviter l'avertissement concernant une déclaration de fonction non-modèle.
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!