Außer der Angabe eines Typs in einem Klassentemplate ist es auch möglich einen konstanten Ausdruck als Parameter zu übergeben. Dies kann z. B. zur Übergabe eines Größenparameters benutzt werden. Für eine Arrayklasse wird nicht nur der Typ, sondern auch die Größe interessant sein.
template <class T> class Array { public: T a[??]; // wie groß soll der Array sein? .... // noch ein paar Methoden };Für verschiedene Größen können dann verschiedene Klassen definiert werden, wenn man das Template erweitert:
template <class T, int Groesse> class Array { public: T a[Groesse]; // Groesse ist bekannt .... // noch ein paar Methoden };Werden jetzt Objekte der Arrayklasse erzeugt, müssen zwei Parameter übergeben werden. Klassen mit verschiedenem Typ oder verschiedener Größe erscheinen als unterschiedliche Klassen! Sie haben nur denselben Namen.
Array; // int Array, 10 Elemente Array ; // double Array, 10 Elemente Array ; // int Array, 5 Elemente Array ; // double Array, 5 Elemente
Alle diese Klassen sind verschieden!