Maison >développement back-end >C++ >Comment surcharger correctement l'opérateur de support d'angle pour une classe de modèle ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 15:29:02538parcourir

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>

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!

Déclaration:
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