Entfaltet: Weniger Code in C++ 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.
- Andreas Fertig
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.
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.