Maison  >  Article  >  développement back-end  >  Comment la syntaxe des points de suspension fonctionne-t-elle avec les packs de paramètres de modèle variadiques en C 11 ?

Comment la syntaxe des points de suspension fonctionne-t-elle avec les packs de paramètres de modèle variadiques en C 11 ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 10:52:03792parcourir

How does the ellipsis syntax work with variadic template parameter packs in C  11?

Syntaxe ellipse des modèles variadiques

Les modèles variadiques en C 11 permettent un nombre variable d'arguments de modèle. La syntaxe du jeton points de suspension (...) dans ce contexte suit des règles strictes :

Déballage/Emballage :
La position des points de suspension détermine son objectif :

  • Côté droit (motif) : Décompresse un pack de paramètres de modèle.
  • Côté gauche (nom) : Crée un argument compressé.

Expansion :
Le motif sur le côté gauche de... est répété, avec des expressions séparées par des virgules remplaçant chaque motif décompressé.

Application :
Dans le code fourni :

<code class="cpp">return unique_ptr<T>(new T(std::forward<Args>(args)...));</code>
  • std::forward: Est une fonction de modèle non variadique prenant un seul paramètre et argument de modèle.
  • Déballage : std::forward(args)... se développe en std::forward(arg0), std::forward(arg1), ..., où arg0, arg1, ... sont les arguments individuels.

Raison du placement des points de suspension :
Dans la liste d'arguments du modèle et la liste des paramètres, le les points de suspension sont placés au milieu pour réaliser différentes expansions.

  • Liste d'arguments de modèle : Les points de suspension permettent un nombre variable d'arguments.
  • Paramètre list : Les points de suspension garantissent que les arguments sont transmis sous la forme d'un seul argument compressé.

Notes supplémentaires :

  • Le modèle peut inclure spécificateurs d'accès (par exemple, public).
  • Les points de suspension peuvent être utilisés pour initialiser des tableaux, par exemple, {args, sizeof(T)}....
  • La syntaxe est la même quel que soit si le modèle est une classe ou une fonction.

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