Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Funktionsmall template void myfunc(Type * arr, int n) { // kod; // objekt av typ Type kan deklareras och // användas inom funktionen } Implicit instansiering, Type byts mot aktuell typ Type döljer ev. Type deklarerat före mallen
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Klassmall template class Stack { Stack(); ~Stack(); void push(const Type item); void pop(Type &item); } instansiering görs explicit enligt: Stack my_stack; Type byts mot aktuell typ
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Template nontype parameter+defaults template class Stack { public: Stack(); ~Stack(); void push(const Type item); void pop(Type &item); private: Type theStack[size]; } Defaultvärde från flera deklarationer kan användas konstant uttryck, beräknas vid kompilering
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Klassmall forts Medlemsfunktioner definierade i.cpp-filen måste också göras som mallar: template Stack ::push const Type item) // OBS! { // kod } Type byts mot aktuell typ
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT friends (vänner) i klassmallar Följande kan vara “vänner till klassmallar”: klass eller funktion som inte är mall Klass eller funktion som är mall, bunden till klassmallen genom att den använder klassmallens typparameter Klass eller funktion som är mall, obunden, dvs med egen typparameter oberoende av klassmallens
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Om klassvariabler definieras i en klassmall får varje instansiering sin egen uppsättning. Klasser inuti klasser kan göras även med mall. Den inre klassen kan använda den yttre klassens mall-parametrar. Medlemsfunktioner och nästade klasser i en klassmall kan ha egna typparametrar oberoende av klassmallens, ”member template” detta används i abstrakta containertyper