Vereinfachen des Aufrufs variadischer Funktionen mithilfe von C 17 Folds
Variadic-Vorlagenargumente bieten eine bequeme Möglichkeit, mit Funktionen zu arbeiten, die eine variable Anzahl von Argumenten akzeptieren . Allerdings kann die Erstellung rekursiver Ketten zum Aufrufen von Funktionen für jedes variadische Argument zu einer redundanten Codegenerierung führen. So können Sie dieses Problem mithilfe von C 17-Faltausdrücken oder einer Lösung vor C 17 lösen.
C 17-Faltausdruck:
(f(args), ...);
Dieser Faltausdruck kann kann verwendet werden, um eine Funktion für alle variadischen Vorlagenargumente aufzurufen, was zu einem einzigen N-Argument-Funktionsaufruf führt.
Lösung vor C 17:
1 . Wrap-Funktion in Bezeichner:
Transformieren Sie die Funktion, um ein int zurückzugeben, das als Dummy-Argument in einer Initialisierungsliste verwendet werden kann:
int print_wrap(const T& t) { print(t); return 0; }
2. Listeninitialisierer erstellen:
Verwenden Sie einen Listeninitialisierer, um die Variadic-Argumente zu erweitern und die geänderte Funktion aufzurufen:
{ print_wrap(args)... }
3. Definieren Sie den Helper-Namespace:
Um diesen Ansatz wiederverwendbar zu machen, definieren Sie einen Helper-Namespace:
namespace so { using expand_type = int[]; } #define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }
4. Verwendung:
SO_EXPAND_SIDE_EFFECTS(f(args));
Vorteile:
Das obige ist der detaillierte Inhalt vonWie können C 17-Faltausdrücke den Aufruf variadischer Funktionen vereinfachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!