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
Freigeben: 2024-12-18 01:03:15
Original
461 Leute haben es durchsucht

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, ...);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

Unmodified Function exampleB:

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

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`.
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage