zurück zum Artikel

Entfaltet: Weniger Code in C++ dank Fold Expressions

Andreas Fertig
Weniger Code dank Fold Expressions

Die mit C++17 eingeführten Fold Expressions machen variadische Templates noch wertvoller. Mit weniger Code lässt sich das gleiche Ergebnis erzielen.

Variadische Templates gehören zu den einflussreichsten Neuerungen in C++11. Diese Art der Klassen und Funktionen kann statt einer vorgegebenen eine beliebige Menge an Argumenten annehmen. Auch deren Typ spielt keine Rolle. Gehalten werden die Argumente in einem Parameter-Pack.

C++17 erweiterte die variadischen Templates um Fold Expressions. Dank ihrer lassen sich die Parameter-Packs direkt durch einen Operator reduzieren. Es existiert eine unäre und eine binäre Version. Beide unterteilen sich wiederum in eine linke und eine rechte Variante. Die Richtung gibt an, von welcher Seite das Parameter-Pack reduziert wird, also wo die Ellipsis steht.

C++-Tricks

Insgesamt existieren vier Fold-Varianten: unärer Links-Fold, unärer Rechts-Fold, binärer Links-Fold und binärer Rechts-Fold. Ein unärer Rechts-Fold hätte die Form (args + ...), ein binärer Links-Fold die Form (0 + ... + args). Der Vorteil der binären Variante liegt im möglichen initialen Wert, im Beispiel 0. Der ist vor allem dann hilfreich, wenn das Pack leer ist. Sind im Pack args die Werte 3, 4 und 5 enthalten, lautet die expandierte Version des binären Links-Fold 0 + 3 + 4 + 5. Ohne Fold Expressions ist eine Rekursion zum Traversieren des Packs notwendig, was mehr Code erfordert.


URL dieses Artikels:
https://www.heise.de/-4684464

Links in diesem Artikel:
[1] https://www.heise.de/ratgeber/Durch-C-Anwendungen-verursachte-Speicherlecks-aufspueren-4661896.html
[2] https://www.heise.de/ratgeber/Entfaltet-Weniger-Code-in-C-dank-Fold-Expressions-4684464.html