"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment utilisez-vous le jeton \"...\" pour regrouper et décompresser des arguments dans des modèles variadiques C++ ?

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

Publié le 2024-11-16
Parcourir:235

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

Les l'emplacement du jeton "..." détermine sa fonction :

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

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

Considérez le modèle variadique suivant :

template
unique_ptr make_unique( Args&&... args )
{
    return unique_ptr(new T(std::forward(args)...));
}

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 le conditionnement 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 expression à gauche de "..." est répété, séparé 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

Utilisation avancée : initialisation des tableaux

Ellipsis peut également être utilisé pour initialiser des tableaux :

struct data_info
{
     boost::any  data;
     std::size_t type_size;
};

std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}

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

En conclusion , le jeton "..." dans le contexte des 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3