Maison > développement back-end > C++ > C peut-il déduire des types de modèles à partir des types de retour de fonction ?

C peut-il déduire des types de modèles à partir des types de retour de fonction ?

Mary-Kate Olsen
Libérer: 2024-11-06 12:23:02
original
368 Les gens l'ont consulté

Can C   Deduce Template Types from Function Return Types?

Déduction de modèle basée sur le type de retour de fonction en C

En C, il peut être souhaitable d'utiliser la déduction de modèle pour simplifier le code qui instancie le générique fonctions basées sur les types de données des arguments de la fonction. Considérons l'exemple suivant :

<code class="cpp">GCPtr<A> ptr1 = GC::Allocate();
GCPtr<B> ptr2 = GC::Allocate();</code>
Copier après la connexion

Au lieu de spécifier explicitement les paramètres de type générique, l'objectif est de parvenir à cette déduction en utilisant le type de retour de la fonction GC::Allocate(). Cependant, C n'autorise pas la déduction de type basée sur le type de retour.

<code class="cpp">class GC
{
public:
    template<typename T>
    static GCPtr<T> Allocate();
};</code>
Copier après la connexion

Bien que le type de retour soit générique, le compilateur nécessite la spécification explicite des paramètres de type de modèle et lors de l'instanciation de la fonction GC::Allocate().

Pour atténuer cette limitation, une fonction auxiliaire peut être introduite :

<code class="cpp">template <typename T>
void Allocate(GCPtr<T>& p) {
    p = GC::Allocate<T>();
}</code>
Copier après la connexion

En utilisant cette fonction, l'objectif initial peut être atteint comme suit :

<code class="cpp">GCPtr<A> p;
Allocate(p);</code>
Copier après la connexion

La question de savoir si cette syntaxe offre un avantage significatif par rapport à la spécification de type explicite est subjective.

Remarque : En C 11, il est possible d'omettre l'un des les déclarations de type en utilisant le mot-clé auto :

<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
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