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
DDDoriginal
2024-12-18 01:03:15470parcourir

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, ...);

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

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);
}

Exemple de fonction non modifiéeB :

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

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`.
}

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!

Déclaration:
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