iX 9/2020
S. 128
Praxis
C++-Tricks

auto als Non-Type-Templateparameter

Passgenau

Andreas Fertig

Der Platzhalter auto als Non-Type-Templateparameter ist seit C++17 Bestandteil der Sprache. Er bewirkt, dass der Typ des entsprechenden Non-Type-Templateparameters automatisch abgeleitet wird. Dadurch vereinfachen sich Templates.

C++ kennt zwei verschiedene Arten von Templateparametern: Typ und Nichttyp. Ein Nichttypparameter wie der Non-Type-Templateparameter, kurz NTTP, ist immer ein konkreter Wert, meistens eine Zahl, aber auch Adressen, Funktionszeiger oder enum-Werte sind möglich. Ab C++20 können Entwickler auch float und eigene Klassen verwenden, solange diese bestimmte Bedingungen erfüllen.

Bei Type-Templateparametern erkennt der Compiler zur Kompilierzeit den Typ, lediglich bei expliziten Spezialisierungen gibt der Entwickler ihn direkt an. Bei Non-Type-Templateparametern ist im Templatekopf immer der Typ angeführt. Entweder ermittelt der Compiler den zugehörigen Wert oder der Entwickler setzt ihn wie bei den expliziten Spezialisierungen. Vor C++17 konnte der Compiler den Typ eines Non-Type-Templateparameters nicht ausfindig machen, das führte zu Duplikationen. Als Beispiel dient der Type Trait std::integral_constant, der zur Kompilierzeit verfügbare Typen mit ­einem Wert erstellt. Vor C++17 sah die Verwendung so aus:

Kommentieren