Heim >Backend-Entwicklung >C++ >Wie kann ich mit Variablenargumentlisten variable Argumente von einer Funktion an eine andere übergeben?
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).
Leider direkt Die Übergabe variabler Argumente zwischen Funktionen ist nicht möglich. Um dies zu erreichen, ist eine benutzerdefinierte Lösung erforderlich.
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!