Maison >développement back-end >C++ >Comment fonctionne le jeton points de suspension (...) dans les modèles variadiques C 11 ?

Comment fonctionne le jeton points de suspension (...) dans les modèles variadiques C 11 ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 01:03:28780parcourir

How does the ellipsis (...) token work in C  11 variadic templates?

Modèles variadiques et jeton Ellipsis ("...")

En C 11, les modèles variadiques permettent un nombre flexible de modèles paramètres. Lors de la définition d'un modèle variadique, le jeton points de suspension (...) joue un rôle crucial.

Déballage vs emballage

La position des points de suspension détermine sa fonction :

  • Déballage (côté droit) : Lorsqu'il est utilisé sur le côté droit d'une expression, ... décompresse un pack de paramètres de modèle. Les modèles décompressés, séparés par des virgules, remplacent les points de suspension dans l'appel de fonction réel.
  • Emballage (côté gauche) : Lorsqu'il est placé sur le côté gauche, ... regroupe les arguments dans un pack de paramètres de modèle. Les arguments compressés sont disponibles dans la fonction en tant qu'entité unique.

Exemple de déballage

Considérez la fonction de modèle variadique suivante :

<code class="cpp">template< class T, class... Args >
unique_ptr<T> make_unique( Args&amp;&amp;... args )
{
    return unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>

Lors de l'appel de make_unique avec plusieurs arguments, les points de suspension (dans std::forward(Args>(args)...) permettent à la fonction d'accepter un nombre variable d'arguments. Les points de suspension décompactent le pack de paramètres Args, ce qui entraîne le expression développée suivante :

<code class="cpp">std::forward<Arg0>(arg0), std::forward<Arg1>(arg1), ...</code>

Placement des points de suspension dans les arguments du modèle et de la fonction

Dans la liste des arguments du modèle, les points de suspension sont placés au milieu pour indiquer que le paramètre pack se poursuit dans la liste des paramètres de fonction. En effet, il peut y avoir des paramètres de modèle supplémentaires (par exemple, des paramètres non variadiques) après le pack de paramètres variadiques.

Dans l'implémentation de la fonction, les points de suspension sont placés à la fin. de l'expression pour marquer la fin des arguments décompressés. Il garantit que tous les arguments restants sont transmis sans être regroupés dans une seule entité.

Applications supplémentaires

Les points de suspension. peut également être utilisé dans d'autres contextes, tels que :

  • Création de tableaux avec des initialiseurs variadiques
  • Définition de classes qui héritent de plusieurs classes de base (via une syntaxe publique Mixins...)

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:
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