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), ...);
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; }
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)... }
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)... }
4. Utilisation :
SO_EXPAND_SIDE_EFFECTS(f(args));
Avantages :
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!