Maison > développement back-end > C++ > Comment puis-je parcourir correctement un pack de paramètres C pour éviter les erreurs du compilateur ?

Comment puis-je parcourir correctement un pack de paramètres C pour éviter les erreurs du compilateur ?

Mary-Kate Olsen
Libérer: 2024-12-17 15:07:09
original
287 Les gens l'ont consulté

How Can I Correctly Iterate Over a C   Parameter Pack to Avoid Compiler Errors?

Bouclage sur les packs de paramètres avec extension de pack

Dans les modèles variadiques, les packs de paramètres permettent de transmettre un nombre flexible d'arguments à une fonction . Lorsque vous essayez de parcourir un pack de paramètres, une erreur de compilation peut survenir si le pack n'est pas correctement développé.

Considérez le code suivant :

template<typename... Args>
static void foo2(Args... args)
{
    (bar(args)...); // Error: parameter pack must be expanded
}
Copier après la connexion

Ce code ne parvient pas à se compiler avec l'erreur "Erreur C3520 : 'args' : le pack de paramètres doit être étendu dans ce contexte." La raison de cette erreur est que les arguments du pack de paramètres doivent être développés avant de pouvoir être utilisés dans l'appel de la fonction bar.

Une façon de réaliser cette extension consiste à utiliser une braced-init-list (liste d'initialiseurs entre accolades). En plaçant l'expansion dans la liste d'initialisation d'un tableau factice, le compilateur peut effectuer l'expansion nécessaire.

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

La liste d'initialisation permet d'étendre le pack entier, et la conversion en void garantit que la virgule opérateur est utilisé, quels que soient les opérateurs surchargés pour le type de retour de la barre.

Une approche alternative, introduite en C 17, est l'utilisation de fold expressions :

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

Ce code fournit un moyen concis et efficace de parcourir le pack de paramètres.

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