Heim >Backend-Entwicklung >C++ >Wie kann ich variable Argumente von einer Funktion an eine andere übergeben, ohne die empfangende Funktion zu ändern?

Wie kann ich variable Argumente von einer Funktion an eine andere übergeben, ohne die empfangende Funktion zu ändern?

DDD
DDDOriginal
2024-12-18 01:03:15462Durchsuche

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

Übergabe variabler Argumente an Funktionen mit Listen variabler Argumente

Betrachten Sie zwei Funktionen mit ähnlichen variablen Argumenten:

void example(int a, int b, ...);
void exampleB(int b, ...);

Angenommen, example ruft exampleB auf, ohne jedoch exampleB zu ändern (das an anderer Stelle verwendet wird). Wie können wir die Variablenargumente von Beispiel an BeispielB übergeben?

Lösung:

Die direkte Übergabe von Argumenten ist nicht möglich. Stattdessen erstellen wir eine Wrapper-Funktion, die eine va_list akzeptiert:

#include <stdarg.h>
static void exampleV(int b, va_list args);

Modified Function exampleA:

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

Unmodified Function exampleB:

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

Wrapper-Funktion exampleV:

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

Dieser Ansatz ermöglicht es uns, die Variablenargumente von example an exampleB zu übergeben, ohne Letzteres zu ändern. Die Wrapper-Funktion exampleV ruft weder va_start noch va_end auf, was die Konsistenz mit der bestehenden Verwendung von exampleB gewährleistet.

Das obige ist der detaillierte Inhalt vonWie kann ich variable Argumente von einer Funktion an eine andere übergeben, ohne die empfangende Funktion zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn