Maison > développement back-end > C++ > La déduction du modèle peut-elle être basée uniquement sur le type de retour en C ?

La déduction du modèle peut-elle être basée uniquement sur le type de retour en C ?

Patricia Arquette
Libérer: 2024-11-05 20:13:02
original
284 Les gens l'ont consulté

Can Template Deduction Be Based Solely on Return Type in C  ?

Déduction de modèle pour le type de retour de fonction

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

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

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

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

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!

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