Maison  >  Article  >  développement back-end  >  Comment utilisez-vous le jeton \"...\" pour compresser et décompresser les arguments dans les modèles variadiques C ?

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

DDD
DDDoriginal
2024-10-31 13:43:02889parcourir

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>

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>

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!

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