En C, la déduction de modèle est un mécanisme qui déduit les arguments de type générique pour une fonction ou une classe de modèle en fonction des arguments fournis. Cette fonctionnalité permet un code plus concis et plus sûr.
Considérez l'extrait de code suivant :
<code class="cpp">class GC { public: template <typename T> static GCPtr<T> Allocate(); };</code>
Ici, la fonction Allouer est une fonction générique qui alloue de la mémoire pour un objet de type T. Pour utiliser cette fonction, l'appelant doit spécifier explicitement l'argument de type, comme indiqué ci-dessous :
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate<A>(); GCPtr<B> ptr2 = GC::Allocate<B>();</code>
La question se pose de savoir s'il est possible d'éliminer les arguments de type explicites en fonction du type de retour de l'allocation. fonction. Malheureusement, il n'est pas possible en C d'effectuer une déduction de modèle basée uniquement sur le type de retour.
Cependant, il existe d'autres moyens d'obtenir un effet similaire. Une approche courante consiste à utiliser une fonction d'assistance qui déduit automatiquement le type :
<code class="cpp">// Helper function template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); } int main() { GCPtr<A> p = 0; Allocate(p); }</code>
Avec cette approche, l'appelant peut simplement transmettre une référence à l'objet GCPtr, et la fonction d'assistance déduira le type et appellera la fonction Allouer appropriée.
Dans C 11 et les versions ultérieures, le mot-clé auto peut être utilisé pour simplifier encore davantage la déduction de type :
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
En tirant parti des fonctions d'assistance ou du mot-clé auto, il est possible d'obtenir la fonctionnalité souhaitée tout en conservant les avantages de la déduction par modèle.
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!