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

Comment les fonctions d'opérateur ami peuvent-elles permettre des conversions de types implicites dans les modèles C ?

Patricia Arquette
Libérer: 2024-11-17 04:29:03
original
552 Les gens l'ont consulté

How Can Friend Operator Functions Enable Implicit Type Conversions in C   Templates?

Conversion de type implicite dans les modèles avec des fonctions d'opérateur ami

Pour utiliser la conversion de type implicite avec des modèles, une technique fréquemment utilisée est la définition d'un fonction ami non membre dans la définition de la classe modèle.

En C , les fonctions de modèle ne sont pas instanciées tant qu'elles ne sont pas invoquées avec des types spécifiques. Lors de la résolution de surcharge, le compilateur déduit les types de paramètres du modèle et élimine tous les modèles qui ne correspondent pas exactement aux types d'arguments, à l'exclusion des conversions implicites.

La solution réside dans l'utilisation d'une fonction d'opérateur ami définie à l'intérieur du modèle. définition de classe. Pour chaque instanciation de modèle, le compilateur génère une fonction gratuite non-modèle avec une signature correspondant aux types substitués.

Par exemple, considérez :

template <typename T>
class test {
    friend test operator+(test const &, test const &) {
        return test();
    }
};
Copier après la connexion

Lorsque le modèle est instancié avec int, le compilateur crée une fonction non-modèle :

test<int> operator+(test<int> const &, test<int> const &) {
    return test<int>();
}
Copier après la connexion

Cette fonction, disponible via une recherche dépendante des arguments, effectue des conversions implicites sur ses arguments. En effet, il est défini en dehors de la classe de modèle et ne nécessite pas de correspondances de type exactes lors de la résolution de surcharge.

Ainsi, les conversions de type implicites deviennent possibles lors de l'appel de l'opérateur sur des objets de type test, permettant des expressions comme :

A<3> a(4);
A<3> b = a + 5;
A<3> c = 5 + a;
Copier après la connexion

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