Maison >développement back-end >C++ >Comment parcourir des listes d'arguments de modèles variadiques en C ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-23 17:17:01195parcourir

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>

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!

Déclaration:
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