Maison > développement back-end > C++ > Comment puis-je transmettre des arguments variables d'une fonction à une autre sans modifier la fonction de réception ?

Comment puis-je transmettre des arguments variables d'une fonction à une autre sans modifier la fonction de réception ?

DDD
Libérer: 2024-12-18 01:03:15
original
473 Les gens l'ont consulté

How Can I Pass Variable Arguments from One Function to Another Without Modifying the Receiving Function?

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

Considérez deux fonctions avec des arguments variables similaires :

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

Supposons que example appelle exampleB, mais sans modifier exampleB (qui est utilisé ailleurs). Comment pouvons-nous passer les arguments variables de l'exemple à l'exemple B ?

Solution :

La transmission directe d'arguments n'est pas possible. Au lieu de cela, nous créons une fonction wrapper qui prend une va_list :

#include <stdarg.h>
static void exampleV(int b, va_list args);
Copier après la connexion

Exemple de fonction modifiée A :

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);
}
Copier après la connexion

Exemple de fonction non modifiéeB :

void exampleB(int b, ...)
{
    va_list args;
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}
Copier après la connexion

Fonction Wrapper exempleV :

static void exampleV(int b, va_list args)
{
    // Whatever `exampleB` was intended to do...
    // Except it doesn't call either `va_start` or `va_end`.
}
Copier après la connexion

Cette approche nous permet de passer les arguments variables d'exemple à exempleB sans modifier ce dernier. La fonction wrapper exampleV n'appelle pas va_start ou va_end, ce qui garantit la cohérence avec l'utilisation existante de exampleB.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal