Funktionstemplates

Ein Funktionstemplate mit Typumandlung

Wir sehen uns jetzt ein einfaches Funktionstemplate an, das zwei Argumente eines Typs hat.

 
  template <class T>  
 
  inline T max(T a, T b) { return a > b ? a : b; } 

void main() { int x, y = 3, z = 4; double a, b = 1.4, c = 7.3; short m, n = 6, o = 9;

x = max(y, z); // max(int, int) a = max(b, c); // max(double, double) m = max(n, o); // max(short, short)

x = max(y, o); // max(int, short) ???? Fehler: Kann nicht generiert werden. }

Hier sehen wir jetzt auch, daß die Erzeugung von Funktionen mit Templates nicht mit dem Schreiben der entsprechenden Funktionen äquivalent ist. Hätten wir nämlich statt des Templates zwei Maximums-Funktionen definiert, eine des Tys int und eine vom Type double wären alle short-Parameter implizit in einen int umgewandelt worden. Für Template-Funktionen gibt es aber gesonderte Ersetzungsstrategien, die zwar sehr viel stringenter sind, aber eine sichere Programmierung zulassen.