Waarom templates ?Met een template kun je een functie of class maken die werkt voor verschillende typen parameters. NB: Een template is een compiler-constructie. Tijdens het compileren wordt de template uitgewerkt: op de plaatsen waar in de template het algemene type staat, wordt het uiteindelijke type ingevuld. Het resultaat is een functie of class die werkt alsof deze geschreven was met het uiteindelijke type. LET OP ! Om die reden moeten ook de member-functies van een template volledig uitgeschreven worden in de header file waarin de template class gedefinieerd wordt. Je kunt een template op zich niet compileren tot object-code zo lang het data-type niet bekend is. Zelf een template makenStel dat we een stack nodig hebben. Dan kunnen we een stack voor variabelen van het type int maken. Voor de grootte van de stack gebruiken we long integers zodat we een flink grote stack kunnen maken.
Met deze class kun je ints op een stack pushen en eraf poppen, maar alleen
ints en geen andere types. Goede kans dat je later ook zo'n stack wilt voor doubles
en je kunt verwachten dat iemand dan ook een stack voor strings wil.
We kunnen ook een template voor een stack maken zodat het in
één keer voor elk willekeurig type werkt.
Dat gaat als volgt: vervang in het bovenstaande voorbeeld alle ints door een template-type, zoals hieronder tpltype en maak van de class een template-class.
De member-functies zien er als volgt uit:
Uiteindelijk willen we de template ook gebruiken. Eerst maken we drie variabelen: instack, doublestack en stringstack, respectievelijk een stack van ints, een stack van doubles en een stack van strings.
Nu kunnen we memberfuncties van die stacks gebruiken om ze te vullen, te zien hoeveel elementen erin zitten en elementen te poppen:
Zie ook de voorbeelden. |