====== Was sind Templates? ====== Im [[c:start|C-Tutorial]] wurden bereits [[c:func:start#deklaration_und_aufruf|Funktionen]] erklärt. Des weiteren wurde im [[cpp:start|C++-Tutorial]] bereits gezeigt, wie man [[cpp:class:def|Klassen]] definiert. Ein Template ist eine Funktions- oder Klassenvorlage, die mit jedem geeigneten Typ verwendet werden kann. ===== Wozu benutzt man Templates ===== Templates benutzt man normalerweise dazu, um generisch zu programmieren. Die STL (Standard Template Library) ist dafür ein gutes Beispiel. Will man beispielsweise eine Liste von Integer Zahlen speichern kann man die STL benutzen. #include int main(void) { std::list integerList; // Do something with the list return 0; } Man nimmt einen generischen Typ (**std::list**) und instanziert ein Objekt für einen bestimmten Typ (**std::list**). Ein einfaches Beispiel soll dieses Konzept verdeutlichen. ==== Beispiel ==== Angenommen man möchte eine Funktion schreiben, um Zahlen zu addieren. Ohne Templates würde man vermutlich etwas in dieser Art schreiben. inline int add(int const& a, int const& b) { return a + b; } Das Problem dieser Funktion ist, dass man nur Integer Zahlen addieren kann. Möchte man double Zahlen addieren, muss man eine neue Funktion schreiben, die Double Zahlen addiert. Das Erzeugen dieser Funktion kann man allerdings dem Compiler überlassen. template inline Type add(Type const& a, Type const& b) { return a + b; } ==== Erklärung ==== Zunächst definieren wir eine Templatefunktion. Templates werden immer mit dem Schlüsselwort **template** gefolgt von der **Typenliste** eingeleitet. Danach folgt die Definition der Funktion. Doch anstatt eines festgelgten Typs für Rückgabewert und Parameterliste wird der Typ aus der **Typenliste** genommen. Das führt dazu, dass der Compiler für genutzte Typen eine entsprechende Funktion erzeugt. Ein vollständiges Beispiel veranschaulicht die Aussage. #include template inline T add(T const& a, T const& b) { return a + b; } int main(void) { std::cout << add(1, 2) << std::endl; // erzeugt eine Funktion für integer addition std::cout << add(1.0, 2.5) << std::endl; // erzeugt eine Funktion für double addition return 0; } ===== Kapitel ===== Die folgenden Kapitel geben einen Einblick in die Programmierung mit Templates - **Was sind Templates** - [[cpp:template:func|Template Funktionen]] - [[cpp:template:class|Template Klassen]] - [[cpp:template:meta|Template Metaprogrammierung]] - [[cpp:template:danger|Gefahren bei der Programmierung mit Templates]] ===== Links ===== * [[http://forum.proggen.org/viewtopic.php?f=39&t=780|Diskussion im Forum]] ===== Links ===== * [[http://forum.proggen.org/viewtopic.php?f=39&t=780|Diskussion im Forum]] * [[http://www.boost.org|Die Boost Bibliotheken]]