Was sind Templates?

Im C-Tutorial wurden bereits Funktionen erklärt. Des weiteren wurde im C++-Tutorial bereits gezeigt, wie man 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 <list>
 
int main(void)
{
  std::list<int> 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<int>).

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 <typename Type>
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 <iostream>
 
template <typename T>
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

  1. Was sind Templates

Links

Links