"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Le C++ peut-il déduire les types de modèles à partir des types de retour de fonction ?

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

Publié le 2024-11-10
Parcourir:418

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. Prenons l'exemple suivant :

GCPtr ptr1 = GC::Allocate();
GCPtr ptr2 = GC::Allocate();

Au lieu de spécifier explicitement les paramètres de type générique, le but est de réaliser 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.

class GC
{
public:
    template
    static GCPtr Allocate();
};

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 :

template 
void Allocate(GCPtr& p) {
    p = GC::Allocate();
}

Grâce à cette fonction, l'objectif initial peut être atteint comme suit :

GCPtr p;
Allocate(p);

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'en omettre un. des déclarations de type utilisant le mot-clé auto :

auto p = GC::Allocate(); // p is of type GCPtr
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3