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

Comment parcourir efficacement une liste d'arguments de modèle variadique compressée ?

Barbara Streisand
Libérer: 2024-10-23 16:23:02
original
177 Les gens l'ont consulté

How to Iterate over a Packed Variadic Template Argument List Efficiently?

Comment parcourir une liste d'arguments de modèle variadique compressée

Itérer sur une liste d'arguments de modèle variadique compressée nécessite de relever deux défis : extraire les données de la liste et déterminer le nombre d'arguments.

Extraire des données

Une méthode consiste à envelopper les données dans un type personnalisé, à les développer dans un vecteur et à itérer dessus. Cependant, cette approche nécessite des appels de fonctions complexes et limite les types d'arguments.

Comptage des arguments

Les méthodes traditionnelles telles que la récursivité ou les boucles ne sont pas réalisables dans une fonction générée par une macro. Au lieu de cela, des fonctions lambda peuvent être utilisées.

Solution de fonction Lambda

À l'aide d'expressions de pliage (C 17), nous pouvons parcourir les arguments à l'aide d'une fonction lambda :

<code class="cpp">template <class ... Ts>
void Foo(Ts &&... inputs) {
    int i = 0;

    ([&amp;] {
        ++i;
        std::cout << "input " << i << " = " << inputs << std::endl;
    }(), ...);
}</code>
Copier après la connexion

Ce lambda peut exécuter des actions, telles que l'impression d'arguments, pendant l'itération.

Gestion des retours et des ruptures

Pour les boucles complexes, on peut utiliser :

  • try/throw : Lance une exception pour terminer la boucle prématurément. Cependant, cela peut entraîner des problèmes de performances.
  • commutateurs variable/if : Créez une instruction variable/if pour chaque action. Cette approche est moins élégante mais offre plus de contrôle.

En tirant parti des expressions de repli et des fonctions lambda, nous pouvons parcourir efficacement une liste d'arguments de modèle variadique remplie, extraire les données et gérer les ruptures/retours selon les besoins.

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