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>
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>
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>
En utilisant cette fonction, l'objectif initial peut être atteint comme suit :
<code class="cpp">GCPtr<A> p; Allocate(p);</code>
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>
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!