Maison > développement back-end > C++ > le corps du texte

Comment surcharger correctement l'opérateur de support d'angle pour une classe de modèle ?

Linda Hamilton
Libérer: 2024-11-01 15:29:02
original
459 Les gens l'ont consulté

How to Properly Overload the Angle Bracket Operator for a Template Class?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!