Déduction de modèle pour une fonction en fonction de son type de retour ?
En C, la déduction de modèle fournit un moyen pratique de déterminer les arguments de modèle en fonction du arguments fournis à un appel de fonction. Cependant, il existe certaines limites à la déduction de modèles, telles que l'incapacité de déduire des arguments de type en fonction du type de retour d'une fonction.
Le problème :
L'original La question cherche à éliminer le besoin de spécifier explicitement des arguments de type lors de l'appel de la fonction Allocate() dans le code suivant :
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate();</code>
La réponse :
Malheureusement, le modèle la déduction ne peut pas être utilisée pour déduire les arguments de type en fonction du type de retour. Au lieu de cela, c'est l'inverse : le type de retour est déterminé une fois que la signature du modèle a été mise en correspondance.
Solution de contournement :
Pour contourner cette limitation, l'attribut Allocate( ) peut être enveloppée dans une fonction d'assistance qui masque l'argument de type à l'appelant :
<code class="cpp">// helper template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); } int main() { GCPtr<A> p = 0; Allocate(p); }</code>
Cela permet à l'appelant d'utiliser la fonction Allocate() sans spécifier explicitement l'argument de type :
<code class="cpp">GCPtr<A> p = 0; Allocate(p);</code>
Remarque supplémentaire :
C 11 introduit le mot-clé auto, qui permet au compilateur de déduire le type de l'initialiseur. Cela simplifie encore le code :
<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!