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

Comment parcourir des listes d'arguments de modèles variadiques en C ?

Linda Hamilton
Libérer: 2024-10-23 17:17:01
original
107 Les gens l'ont consulté

How to Iterate Over Variadic Template Argument Lists in C  ?

Itérer sur des listes d'arguments de modèles variadiques

Des listes d'arguments de modèles variadiques compressées, bien que puissantes, peuvent poser des problèmes d'accès aux arguments individuels. Ce problème est particulièrement pertinent lorsqu'il faut parcourir de telles listes pour séparer les arguments en fonction de leurs types.

Pour y parvenir, une option consiste à exploiter les expressions de repli introduites dans C 17. En utilisant un appelable, un expression lambda dans ce cas, on peut définir une boucle qui parcourt les arguments et effectue les opérations souhaitées.

Voici un exemple :

<code class="cpp">#include <iostream>

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

  // Lambda that executes for each passed argument.
  ([&] {
    ++i;
    std::cout << "input " << i << " = " << inputs << std::endl;
  }(), ...);
}

int main() {
  Foo(2, 3, 4u, (int64_t)9, 'a', 2.3);
  return 0;
}</code>
Copier après la connexion

Dans cet exemple, le lambda est exceptionnellement concis, mais des opérations encore plus complexes peuvent être effectuées au sein de la boucle. Il est important de noter que cette technique nécessite C 17 ou une version ultérieure.

Pour les scénarios où le retour ou l'interruption de l'itération est nécessaire, les approches try/throw et variable/if switch sont disponibles mais doivent être considérées comme des odeurs de code et utilisé uniquement si cela est inévitable.

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!