Heim >Backend-Entwicklung >C++ >Wie kann ich mit Variablenargumentlisten variable Argumente von einer Funktion an eine andere übergeben?

Wie kann ich mit Variablenargumentlisten variable Argumente von einer Funktion an eine andere übergeben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-08 15:05:11361Durchsuche

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

Übergabe variabler Argumente an Funktionen mit variablen Argumentlisten

Bei der Arbeit mit Funktionen, die variable Argumentlisten verwenden, besteht die Herausforderung, Argumente von einer Funktion an eine andere zu übertragen, die a akzeptiert Eine ähnliche Liste kann entstehen.

Betrachten Sie das folgende Beispiel:

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

Hier ruft example exampleB auf. Eine wichtige Frage ist, wie die Variablen aus der Variablenargumentliste in Beispiel an BeispielB übergeben werden, ohne BeispielB zu ändern (was in anderen Kontexten verwendet werden kann).

Direkte Übergabe nicht möglich

Leider direkt Die Übergabe variabler Argumente zwischen Funktionen ist nicht möglich. Um dies zu erreichen, ist eine benutzerdefinierte Lösung erforderlich.

Verwendung einer va_list-Hilfsfunktion

Um diese Lücke zu schließen, können wir eine Hilfsfunktion einführen, die eine va_list als Argument akzeptiert:

#include <stdarg.h>

static void exampleV(int b, va_list args);

exampleA (aus Konsistenzgründen umbenannt) wurde geändert, um diesen Helfer zu verwenden Funktion:

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

BeispielB kann auch die gleiche Hilfsfunktion ohne Änderungen verwenden:

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

In BeispielV können die tatsächlichen Operationen ausgeführt werden, die in BeispielB ausgeführt werden sollten, ohne die Notwendigkeit von va_start oder va_end.

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

Mit diesem Ansatz können wir variable Argumente effektiv von einer Funktion an übergeben eine andere, ohne die ursprüngliche Implementierung der zweiten Funktion zu ändern.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Variablenargumentlisten variable Argumente von einer Funktion an eine andere übergeben?. 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