Templatespezialisierung
Wenn’s mal wieder was besonderes sein soll: Templates sind ja eigentlich als generische Möglichkeit zur Generierung von Code ausgelegt. Bei aller Verallgemeinerung hat man allerdings manchmal das Bedürfnis, für einzelne Parametertypen etwas besonderes zu machen. Dafür gibt es dann Templatespezialisierung: findet der Compiler bei der Instanziierung eines Templates eine spezialisierte Variante für einen speziellen Typ, dann nimmt er diese, statt der allgemeinen Variante. Dabei kann sich das Verhalten (oder im Falle von Klassentemplates: die Struktur) der spezialisierten Variante durchaus deutlich vom allgemeinen Template unterscheiden.
Video
Code
|
|
Erklärung
Das print
-Template in der allgemeingültigen Variante hat unter meinem Compiler ein Problem: immer wenn ich einen bool
ausgeben lassen will, kriege ich 0 und 1, statt true
und false
. Das ist etwas unschön, aber Templatespezialisierung kann
hier Abhilfe schaffen. Wir spezialisieren in Zeile 8 das Template, indem wir es wieder hinschreiben, die
Template-Parameterliste aber leer lassen und stattdessen wie bei der Instanziierung den konkreten Typ, für den wir
spezialisieren, hinter den Templatenamen. Instanziieren wir nun in der main-Funktion das Template, so nimmt der Compiler in
den Zeilen 15 und 17 die allgemeine Variante und instanziiert sie für int
und double
. In Zeile 16 hingegen wählt der
Compiler die spezialisierte Variante aus und gibt damit auch korrekterweise “true” und “false” aus.