Maison > développement back-end > C++ > La déduction de modèle peut-elle fonctionner en fonction du type de retour d'une fonction en C ?

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
802 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!

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