Maison > développement back-end > C++ > le corps du texte

La déduction de modèle peut-elle fonctionner en fonction du type de retour d'une fonction en C ?

Susan Sarandon
Libérer: 2024-11-06 05:35:02
original
691 Les gens l'ont consulté

Can Template Deduction Work Based on a Function's Return Type in C  ?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!