Maison > développement back-end > C++ > Comment boucler correctement un pack de paramètres dans des modèles variadiques ?

Comment boucler correctement un pack de paramètres dans des modèles variadiques ?

Patricia Arquette
Libérer: 2024-12-27 16:42:10
original
579 Les gens l'ont consulté

How to Correctly Loop Over a Parameter Pack in Variadic Templates?

Comment parcourir un pack de paramètres à l'aide d'une extension de pack

Lors de l'utilisation de modèles et de fonctions variadiques, il est essentiel de comprendre l'utilisation du pack agrandissements. Considérez le code suivant :

template<typename T>
static void bar(T t) {}

template<typename... Args>
static void foo2(Args... args)
{
    (bar(args)...);
}
Copier après la connexion

Lors de la compilation, ce code échoue avec l'erreur :

Error C3520: 'args': parameter pack must be expanded in this context
Copier après la connexion

La solution : extension du pack dans Braced-Init-List

Pour résoudre ce problème, vous pouvez utiliser une extension de pack au sein d'un braced-init-list :

template<typename... Args>
static void foo2(Args &&&... args)
{
    int dummy[] = { 0, ( (void) bar(std::forward<Args>(args)), 0) ... };
}
Copier après la connexion

Comprendre la Braced-Init-List

La liste d'initialisation à l'intérieur de la définition du tableau étend l'extension du pack en un fichier séparé par des virgules liste. Le cast to void garantit que l'opérateur virgule utilisé est celui intégré plutôt que toute version surchargée. Cela garantit une évaluation de gauche à droite de l'expansion du pack.

Options supplémentaires avec C 17

En C 17, vous pouvez simplifier le code à l'aide d'expressions de pliage :

((void) bar(std::forward<Args>(args)), ...);
Copier après la connexion

Conclusion

En utilisant une extension de pack au sein d'un braced-init-list ou une expression de repli en C 17, vous pouvez efficacement parcourir un pack de paramètres et éviter les erreurs de compilation. Comprendre cette technique est crucial pour travailler avec des modèles et des fonctions variadiques en C .

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal