30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

412 13. Templates<br />

ben wir es hier also mit dem bereits bekannten ElementType sowie auch mit<br />

e<strong>in</strong>em IntType zu tun. Wenn wir schon für die Anzahl der Elemente e<strong>in</strong>en<br />

generischen Typ verwenden, dann ist es natürlich auch nur recht und billig,<br />

für den return-Value der Funktion denselben generischen Typ zu verwenden.<br />

Also haben wir hier auch die Deklaration des return-Values über unseren<br />

generischen Typ vorgenommen. Das br<strong>in</strong>gt uns genau zur Eigenschaft von<br />

generischen Typen <strong>in</strong> Templates, die wir bisher implizit vorausgesetzt haben:<br />

Innerhalb e<strong>in</strong>er Template Deklaration und Def<strong>in</strong>ition wird e<strong>in</strong> generischer<br />

Typ ganz genau gleich verwendet, wie wir sonst e<strong>in</strong>en konkreten Typ verwenden<br />

würden. Das Ersetzen durch e<strong>in</strong>en konkreten Typ nimmt dann der<br />

Compiler für uns vor. Der Gültigkeitsbereich der generischen Typbezeichner<br />

ist selbstverständlich auf die Deklaration und Def<strong>in</strong>ition des Templates selbst<br />

limitiert, ansonsten würde es ja zu sehr bösen Überraschungen kommen.<br />

Außer im return-Value und im zweiten Parameter f<strong>in</strong>det sich der generische<br />

Typ IntType natürlich auch <strong>in</strong> der Def<strong>in</strong>ition der Funktion wieder,<br />

denn current_max muss natürlich auch diesen Typ haben, ebenso unsere<br />

Laufvariable <strong>in</strong>dex.<br />

Ändern wir nun wiederum unser Testprogramm so ab, dass es unsere modifizierte<br />

Version des Templates <strong>in</strong>kludiert, so zeigt sich, dass diese Version<br />

genau dasselbe Resultat liefert, wie die beiden Versionen zuvor. Der Compiler<br />

betrachtet hier e<strong>in</strong>fach nur IntType als zusätzlichen generischen Parameter,<br />

zu dem er e<strong>in</strong>e konkrete Entsprechung f<strong>in</strong>den muss. Im Fall unseres Testprogramms<br />

wird als Entsprechung <strong>in</strong>t gefunden, denn e<strong>in</strong>e Ganzzahlkonstante<br />

wird vom Compiler natürlich implizit als <strong>in</strong>t betrachtet.<br />

Das geänderte Testprogramm f<strong>in</strong>det sich auf der beiliegenden CD-ROM<br />

unter dem Namen f<strong>in</strong>d_max_test_v3.cpp und der Output, den dieses Programm<br />

liefert, ist erwartungsgemäß wieder derselbe, den auch die Vorgängervarianten<br />

produziert haben.<br />

Auf den ersten Blick sche<strong>in</strong>t diese Version des Templates also die Erfüllung<br />

aller Träume zu se<strong>in</strong>: Wir implementieren e<strong>in</strong>mal den Algorithmus und er<br />

funktioniert unabhängig vom Typ der Elemente und auch unabhängig vom<br />

Typ der Längenangabe wunderbar. Hätten wir ke<strong>in</strong>e Function Templates zur<br />

Verfügung, so müssten wir für jeden bestimmten Elementtyp e<strong>in</strong>e eigene overloaded<br />

Function schreiben. Außerdem müssten wir auch den num_elements<br />

Parameter immer an den Typ anpassen oder gleich den größtmöglichen Ganzzahldatentyp<br />

verwenden, um auf der sicheren Seite zu bleiben. Da wir im<br />

Vorh<strong>in</strong>e<strong>in</strong> nicht e<strong>in</strong>mal wissen, mit welchen Parametertypen und Komb<strong>in</strong>ationen<br />

derselben wir es zu tun bekommen, schreiben wir gleich e<strong>in</strong>e unendlich<br />

lange Latte von verschiedenen Overload<strong>in</strong>gs und hoffen, dass e<strong>in</strong>es davon<br />

schon auf die spätere Verwendung passen wird.<br />

Die hier angesprochene Erfüllung aller Träume birgt allerd<strong>in</strong>gs auch e<strong>in</strong><br />

paar Albträume, die man erst nach der anfänglichen Euphorie bemerkt. Um<br />

auch über diese Bescheid zu wissen, betrachten wir e<strong>in</strong>mal e<strong>in</strong> paar Möglich-

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!