Video: C++Now 2017: Zach Laine “Expression Templates Everywhere with C++14 and Yap" 2024
Die Standard-C ++ - Bibliothek bietet einen vollständigen Satz von mathematischen, Zeit-, Eingabe- / Ausgabe- und DOS-Operationen, um nur einige zu nennen. Viele der frühen Programme, die Sie als Anfänger lernen, verwenden die sogenannten Zeichenkettenfunktionen, die in den Include-Datei-Strings definiert sind.
Die Argumenttypen für viele dieser Funktionen sind festgelegt. Zum Beispiel müssen beide Argumente für strcpy (char *, char *) ein Zeiger auf eine nullterminierte Zeichenkette sein - nichts anderes ergibt einen Sinn.
Es gibt Funktionen, die auf mehrere Typen anwendbar sind. Betrachten wir das Beispiel der Funktion lowly maximum (), die maximal zwei Argumente zurückgibt. Alle folgenden Variationen sind sinnvoll:
int maximum (int n1, int n2); // gib max von zwei ganzen Zahlen ohne Vorzeichen zurück (unsigned u1, unsigned u2); doppeltes Maximum (Doppel-d1, Doppel-d2); char maximum (char c1, char c2);
Hier möchten Sie maximum () für alle vier Fälle implementieren.
Natürlich können Sie maximum () mit allen möglichen Versionen überladen:
doppeltes Maximum (double d1, double d2) {return (d1> d2)? d1: d2;} int maximum (int n1, int n2) {return (n1> n2)? n1: n2;} char maximal (char c1, char c2) {return (c1> c2)? c1: c2;} // … für alle anderen numerischen Typen wiederholen …
Dieser Ansatz funktioniert. Jetzt wählt C ++ die beste Übereinstimmung, Maximum (int, int) , für eine Referenz wie Maximum (1, 2) . Das Erstellen der gleichen Funktion für jeden Variablentyp ist jedoch eine grobe Zeitverschwendung.
Der Quellcode für alle Maximalfunktionen (T, T) folgt demselben Muster, wobei T einer der numerischen Typen ist. Es wäre so bequem, wenn Sie die Funktion einmal schreiben könnten und C ++ den Typ T nach Bedarf zur Verfügung stellen würde, wenn die Funktion verwendet wird. In der Tat können Sie mit C ++ genau das tun. Sie werden Vorlagen-Definitionen genannt.