Maison > développement back-end > C++ > Comment passer des arguments variables d'une fonction à une autre avec des listes d'arguments variables ?

Comment passer des arguments variables d'une fonction à une autre avec des listes d'arguments variables ?

Mary-Kate Olsen
Libérer: 2024-12-07 03:18:10
original
844 Les gens l'ont consulté

How to Pass Variable Arguments from One Function to Another with Variable Argument Lists?

Passer des arguments variables à des fonctions avec des listes d'arguments variables

Lorsque vous travaillez avec des fonctions qui acceptent un nombre variable d'arguments, il est souvent nécessaire d'appeler une telle fonction d'une autre. Cependant, passer directement des arguments d'une fonction à une autre peut s'avérer problématique sans modifier la fonction cible si elle est déjà utilisée ailleurs.

Considérez l'exemple suivant :

void example(int a, int b, ...);
void exampleB(int b, ...);
Copier après la connexion

Dans ce scénario, exemple appelle l'exempleB. Cependant, la question se pose : comment les arguments variables de l'exemple peuvent-ils être passés à l'exempleB sans modifier son implémentation d'origine ?

Passer directement les arguments de l'exemple à l'exempleB n'est pas possible. Au lieu de cela, une fonction intermédiaire qui prend une va_list doit être créée :

#include <stdarg.h>

static void exampleV(int b, va_list args);

void exampleA(int a, int b, ...)    // Renamed for consistency
{
    va_list args;
    do_something(a);                // Use argument a somehow
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}

void exampleB(int b, ...)
{
    va_list args;
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}

static void exampleV(int b, va_list args)
{
    ...whatever you planned to have exampleB do...
    ...except it calls neither va_start nor va_end...
}
Copier après la connexion

En introduisant exampleV, qui prend à la fois b et args comme arguments, exampleA peut transmettre ses arguments variables à exampleB sans modifier son implémentation. Cette fonction intermédiaire peut ensuite être utilisée pour effectuer les actions prévues sans perturber l'implémentation originale de l'exempleB.

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