Lektion 57:Template-FunktionenIn der vorigen Lektion wurde vorgestellt, wie einfach Funktionen, die eigentlich für eingebaute Typen (int, double, etc.) geschrieben sind, für selbstgebaute Typen (string, StackAsVector, etc.) verwendet werden können. Wenn für die selbstgebauten Typen die Operatoren geeignet überladen wurden, dann beschränkt sich die Anpassung darauf, daß man im Programmcode nur ein paar Typen austauscht. Die offensichtliche Lösung wäre, für jeden Typ eine eigene Sortierfunktion zu erstellen. Das ist zwar ein wenig unpraktisch, wäre aber machbar. Es geht aber einfacher: mit Templates. Eine Funktion wird zu einer Template-Funktion gemacht, indem vor die Funktion
geschrieben wird, und in der Funktion wird jedes Auftauchen des betreffenden Typs durch den Typ T ersetzt. Dabei ist T eine willkürlich gewählte Typ-Variable. Sie könnten diesen Typ auch TemplateTyp, meinTyp, typ, oder ähnlich nennen, aber das einfache T hat sich allgemein durchgesetzt.
Das war leicht! Der Compiler erkennt an den Argumenten, die Sie in eine Funktion geben automatisch, ob er Template-Funktion verwenden sollte, und verwendet sie gegebenenfalls. Template-Funktionen aus anderen Übersetzungseinheiten können nicht verwendet werden! Wenn Sie also z.B. die swap-Funktion als Template-Funktion zur Verfügung stellen möchten, dann muß der Code der swap-Funktion in einer include-Datei stehen. Das plazieren in einer cpp-Datei funktioniert nicht. Übung:Stellen Sie als template die swap-Funktion und eine sort-Funktion in der Datei "sort.h" zur Verfügung. Einsendungen:LösungsvorschlagFalls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern. [aktuelle Version] [inhalt] [index] [Fehlerkorrektur, Verbesserungsvorschlag] © Volkard Henkel <volkard@normannia.de>, last update: 08/25/00 |