O
Wozu ist Klassenemplate gut, wenn es keine dynamische Parametrisierung
unterstuetzt?
Man kann sehr viele schöne Sachen damit machen.
Ein kleines Beispiel, dass hier auch schön zum Thema passt.
Wenn du den vector betrachtest wirst du merken, dass er einige Vorteile gegenüber dem normalen array hat.Zum Beispiel das Iterator Interface.
Ich finds toll, dass ich beim vector einfach schreiben kann:
//...
typedef std::vector<int> Container;
typedef Container::iterator Iterator;
Container vec,vec2;
//...
//alle objekte aus vec nach vec2 bis zu einem bestimmten element suchen
Iterator pos=find(vec.begin(),vec.end(),foo);
std::copy(vec.begin(),vec.pos(),std::back_insert_iterator(vec2));
mit nem array ist das nicht ganz so schön
int vec[10];
//...
int* pos=find(vec,vec+10,foo);
//usw
Gut, vielleicht siehts auf dem ersten Blick schöner aus ;). Das Problem ist,dass wenn du die größe des array änderst, du das auch in find machen musst. Und das ist fehleranfällig.
Deshalb haben findige Programmierer einen array wrapper geschrieben. verhält sich haargenau wie ein array, aber hat das Iterator Interface
typedef array<int,10> Container;
typedef Container::iterator Iterator;
Container vec;
//...
Iterator pos=find(vec.begin(),vec.end(),foo);
//usw
Und zum Beispiel genau hier brauchst du diese template argumente, denn überall wo du vorher ein statisches array genutzt hast, kannst du jetzt diese Klasse nutzen.