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.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht 11 Kommentare lesen
Weniger Code dank Fold Expressions
Lesezeit: 15 Min.
Von
  • Andreas Fertig
Inhaltsverzeichnis

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.

Das war die Leseprobe unseres heise-Plus-Artikels "Entfaltet: Weniger Code in C++ dank Fold Expressions". Mit einem heise-Plus-Abo können sie den ganzen Artikel lesen und anhören.