Maison > Article > développement back-end > La déduction du modèle C peut-elle être simplifiée à l’aide du type de retour de fonction ?
En C, la déduction de modèle joue un rôle crucial dans la déduction des types de paramètres pour les fonctions génériques. Cependant, une déduction de modèle simplifiée en utilisant uniquement le type de retour de la fonction peut être souhaitable.
Considérez l'exemple suivant :
<code class="cpp">class GC { public: template <typename T> static GCPtr<T> Allocate(); };</code>
Ici, la fonction Allocate prend un paramètre de type générique. T et renvoie un pointeur vers un objet de type T. Grâce à la déduction de modèle, il serait possible de simplifier la syntaxe d'allocation des objets comme suit :
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); // Desired output</code>
Malheureusement, cela n'est pas possible en C car le retour Le type d’une fonction n’est pas impliqué dans la déduction du modèle. Au lieu de cela, les signatures de modèles sont mises en correspondance en fonction des arguments d'appel de fonction.
Solution alternative :
Une solution de contournement consiste à utiliser une fonction d'assistance qui masque la spécification de type explicite :
<code class="cpp">template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); } int main() { GCPtr<A> p = 0; Allocate(p); }</code>
Dans cette approche, la fonction Allocate accepte une référence au pointeur comme argument, et l'allocation réelle est gérée en interne. Cela permet une utilisation simplifiée sans sacrifier la flexibilité.
Amélioration C 11 :
Dans C 11, les règles de déduction des modèles ont été étendues, permettant l'omission de l'une des déclarations de type :
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
Cela simplifie encore la syntaxe, la rendant plus pratique pour certains scénarios.
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!