Maison > développement back-end > C++ > Comment les expressions C 17 Fold peuvent-elles simplifier l'invocation de fonctions variadiques ?

Comment les expressions C 17 Fold peuvent-elles simplifier l'invocation de fonctions variadiques ?

Barbara Streisand
Libérer: 2024-11-19 11:17:02
original
984 Les gens l'ont consulté

How Can C  17 Fold Expressions Simplify Variadic Function Invocation?

Simplification de l'invocation de fonctions variadiques à l'aide de C 17 Folds

Les arguments de modèle variadiques fournissent un moyen pratique de travailler avec des fonctions qui acceptent un nombre variable d'arguments . Cependant, créer des chaînes récursives pour appeler des fonctions sur chaque argument variadique peut conduire à une génération de code redondante. Voici comment vous pouvez surmonter ce problème en utilisant des expressions de pli C 17 ou une solution pré-C 17.

Expression de pli C 17 :

(f(args), ...);
Copier après la connexion

Cette expression de pli peut être utilisé pour appeler une fonction sur tous les arguments de modèle variadiques, ce qui entraîne un seul appel de fonction N-arg.

Solution pré-C 17 :

1 . Envelopper la fonction dans l'identifiant :

Transformer la fonction pour renvoyer un entier, qui peut être utilisé comme argument factice dans une liste d'initialisation :

int print_wrap(const T& t) {
  print(t);
  return 0;
}
Copier après la connexion

2. Créer un initialiseur de liste :

Utilisez un initialiseur de liste pour développer les arguments variadiques et appeler la fonction modifiée :

{ print_wrap(args)... }
Copier après la connexion

3. Définir un espace de noms d'assistance :

Pour rendre cette approche réutilisable, définissez un espace de noms d'assistance :

namespace so {
  using expand_type = int[];
}

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }
Copier après la connexion

4. Utilisation :

SO_EXPAND_SIDE_EFFECTS(f(args));
Copier après la connexion

Avantages :

  • Génère un seul appel de fonction avec N arguments.
  • Prend en charge les fonctions avec opérateurs virgules surchargés.
  • Assure une évaluation de gauche à droite des arguments.

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