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

Comment utilisez-vous le jeton \'...\' pour compresser et décompresser les arguments dans les modèles variadiques C ?

DDD
Libérer: 2024-10-31 13:43:02
original
888 Les gens l'ont consulté

How do you use the

Règles de syntaxe pour le jeton "..." dans les modèles variadiques

En C, les modèles variadiques permettent la construction de modèles qui acceptent un nombre variable d'arguments. Le jeton "..." joue un rôle crucial dans ce contexte, servant soit de pack d'arguments, soit de décompresseur de paramètres.

Règles de syntaxe pour le placement des points de suspension

Le le placement du jeton "..." détermine sa fonction :

  • Pack : Lorsqu'il apparaît à gauche d'un nom, "..." indique un pack d'arguments : ...thing // pack
  • Unpack: Lorsqu'il apparaît à droite d'une expression, "..." décompresse un pack de paramètres de modèle : thing... // unpack

Exemple : Modèle variadique avec "..."

Considérez le modèle variadique suivant :

<code class="cpp">template< class T, class... Args >
unique_ptr<T> make_unique( Args&&... args )
{
    return unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>
Copier après la connexion

Dans cet exemple , "..." sert de pack d'arguments, tandis que le "..." dans l'implémentation de la fonction décompresse les arguments dans la variable args.

Raison du placement différent des points de suspension

La différence de placement des points de suspension entre la liste d'arguments du modèle et la liste de paramètres est due à la distinction entre l'emballage des arguments et le déballage des paramètres. Dans la liste des arguments du modèle, "..." signifie que les paramètres doivent être regroupés dans un seul pack de paramètres, tandis que dans la liste des paramètres, "..." indique que les arguments doivent être décompressés en paramètres individuels.

Modèles de décompression

Lorsque "..." apparaît sur le côté droit d'une expression en tant que décompresseur, il suit un modèle spécifique :

  • Le l'expression à gauche de "..." est répétée, séparée par des virgules
  • Chaque répétition représente une expression qui consomme un seul élément du pack de paramètres du modèle

Avancé Utilisation : Initialisation des tableaux

Les points de suspension peuvent également être utilisés pour initialiser des tableaux :

<code class="cpp">struct data_info
{
     boost::any  data;
     std::size_t type_size;
};

std::vector<data_info> v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}</code>
Copier après la connexion

Cela initialise le vecteur v avec des valeurs où chaque élément est une structure contenant un argument et un sizeof (T) paire.

En conclusion, le jeton "..." dans le contexte de modèles variadiques sert à la fois de pack d'arguments et de décompresseur de paramètres, suivant des règles de syntaxe spécifiques pour les modèles de placement et de décompression. Son utilisation flexible permet de créer et de personnaliser des modèles puissants.

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