Maison >développement back-end >C++ >Comment puis-je transmettre des arguments variables d'une fonction à une autre avec des listes d'arguments variables ?
Lorsque vous travaillez avec des fonctions qui emploient des listes d'arguments variables, le défi de transmettre des arguments d'une fonction à une autre qui accepte un une liste similaire peut survenir.
Considérons l'exemple suivant :
void example(int a, int b, ...); void exampleB(int b, ...);
Ici, l'exemple appelle exempleB. Une question clé est de savoir comment transmettre les variables de la liste d'arguments de variables de l'exemple à l'exempleB sans modifier l'exempleB (qui peut être utilisé dans d'autres contextes).
Malheureusement, direct le passage d'arguments variables entre fonctions n'est pas possible. Une solution personnalisée est nécessaire pour y parvenir.
Pour combler cette lacune, nous pouvons introduire une fonction d'assistance qui accepte une va_list comme argument :
#include <stdarg.h> static void exampleV(int b, va_list args);
exempleA (renommé par souci de cohérence) est modifié pour utiliser cet assistant fonction :
void exampleA(int a, int b, ...) { va_list args; do_something(a); // Use argument a somehow va_start(args, b); exampleV(b, args); va_end(args); }
exempleB peut également utiliser la même fonction d'assistance sans aucune modification :
void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); }
Dans exempleV, les opérations réelles qui étaient destinées à être effectuées dans exempleB peuvent être exécutées, sans avoir besoin de va_start ou va_end.
static void exampleV(int b, va_list args) { ...whatever you planned to have exampleB do... ...except it calls neither va_start nor va_end... }
En employant cette approche, nous pouvons transmettre efficacement des arguments variables d'une fonction à une autre, sans altérer l'implémentation originale de la deuxième fonction.
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!