Studium, Ausbildung und Beruf

web uni-protokolle.de
 powered by
NachrichtenLexikonProtokolleBücherForenSonntag, 22. September 2019 

Template (Programmierung)


Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier.
Templates oder Schablonen sind "Programmgerüste" die eine vom Datentyp unabhängige Programmierung ermöglichen. Templates unterstützen die generische Programmierung .

In C++ sind Schablonen von großem Nutzen insbesondere sie mit Vererbung und Überladen von Operatoren kombiniert werden. C++-Standardbibliothek stellt viele nützliche Komponenten in Form Template-Rahmenwerkes zur Verfügung.

Auch die bei Hewlett-Packard (HP) entwickelte STL (englisch standard template library ) aus der vieles in die C++-Standardbibliothek wurde besteht wie der Name vermuten lässt Wesentlichen aus Templates.

Inhaltsverzeichnis

Technischer Überblick

Es gibt zwei Arten von Templates C++: Funktionstemplates und Klassentemplates .

Funktionstemplates

Ein Funktionstemplate verhält sich wie eine Funktion die der Lage ist Argumente verschiedener Typen entgegenzunehmen. C++-Standardbibliothek enthält beispielsweise das Funktionstemplate

 max(x y)  

Es gibt entweder x oder y und zwar abhängig davon welches der beiden größer ist. Das Funktionstemplate max() könnte etwa folgendermaßen definiert sein:

 template <typename T> T max(T x y) { if (x < y) return else return x; }  

Diese Schablone kann genauso aufgerufen werden eine Funktion:

 cout << max(3 7); // gibt aus  

Anhand der Argumente macht der Compiler dass es sich um einen Aufruf an max(int int) handelt und erzeugt eine Variante der bei der der Typ T zu int festgelegt wird.

Der Schablonenparameter könnte auch explizit angegeben Das sähe dann so aus:

 cout << max<int>(3 7); // gibt 7 aus  

Das Ganze funktioniert sowohl für int also auch für string oder irgendeinen anderen Typ für den Vergleich x < y eine wohldefinierte Operation darstellt. Bei selbstdefinierten macht man von Operator-Überladung Gebrauch um die von < für den Typ festzulegen und dadurch Verwendung von max() für den betreffenden Typ zu ermöglichen.

Das Beispiel für sich genommen mag besonders nützlich erscheinen im Zusammenspiel mit der erschließt sich aber eine enorme Funktionalität für neuen Typ ganz einfach dadurch dass man paar Operatoren definiert. Allein schon durch die von < wird ein Typ in die Lage mit den Standardalgorithmen sort() stable_sort() und binary_search() zusammenzuarbeiten sowie mit Datenstrukturen wie Mengen assoziativen Feldern usw.

Klassentemplates

Ein Klassentemplate wendet das gleiche Prinzip auf Klassen Klassentemplates werden oft zur Erstellung von generischen verwendet. Beispielsweise verfügt die C++-Standardbibliothek über einen der eine verkettete Liste implementiert. Um eine Liste von int zu erstellen schreibt man einfach list<int> . Eine verkettete Liste von string s wird zu list<string> . Mit list ist ein Satz von Standardfunktionen definiert immer verfügbar sind egal was man als in den spitzen Klammern angibt.

Spezialisierungen

In C++ lassen sich Templates spezialisieren d.h. man kann Funktionen und Klassen bestimmte Datentypen als Template-Argumente gesondert implementieren. Davon auch manche Implementierungen der C++-Standardbibliothek (beispielsweise die GCC ) Gebrauch. Die Klasse vector ist für den Elementtyp bool als Bitmap implementiert. Auch entnimmt die basic_string -Klasse die Informationen zum Umgang mit den Zeichen der Struktur char_traits die für den Datentyp char und beispielsweise auch wchar_t spezialisiert ist.

Die Deklaration von Spezialisierungen ähnelt der normalen Templates allerdings sind die dem Schlüsselwort template folgenden spitzen Klammern leer und dem bzw. Klassennamen folgen die Templateparameter.

Beispiel:

 template<> class vector<bool> { // Implementierung vector als Bitmap };  

Des Weiteren gibt es auch die teilweise Spezialisierung die die Behandlung von Spezialfällen innerhalb Templates ermöglicht.

Beispiel:

 template<int zeilen int spalten> class Matrix // Implementierung einer Matrix-Klasse }; 
template<int zeilen 1> class Matrix { Implementierung einer 1-spaltigen Matrix-Klasse d.h. einer Vektor-Klasse

Wichtig zu erwähnen ist dass beide komplett voneinander unabhängig sind d.h. sie erben Konstruktoren oder Destruktoren noch Elementfunktionen bzw. Datenelemente voneinander.



Bücher zum Thema Template (Programmierung)

Dieser Artikel von Wikipedia unterliegt der GNU FDL.

ImpressumLesezeichen setzenSeite versendenSeite drucken

HTML-Code zum Verweis auf diese Seite:
<a href="http://www.uni-protokolle.de/Lexikon/Template_(Programmierung).html">Template (Programmierung) </a>