Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++ Grundkurs

Funktions-Templates instanziieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Instanziierung beschreibt einen Prozess, um die Template-Parameter des Funktions-Template durch konkrete Argumente zu ersetzen.
05:09

Transkript

In dieser Lektion will ich Ihnen die Instanziierung von Funktions-Templates vorstellen. Der Prozess, die Template-Parameter durch konkrete Argumente zu ersetzen, wird als Instanziierung des Templates bezeichnet. Was passiert dabei? Der Compiler erzeugt automatisch eine Instanz eines Funktions-Templates aufgrund der Argumente. Das kann er aber nur, wenn er alle Template-Argumente ableiten kann. Das Problem sehen Sie hier und hier. Hier kann er es testen. Funktions-Template xchg. Was soll es tun? Das soll x und y vertauschen. Sie sehen hier den Template-Parameter. Da der hier an der gleichen Stelle auftaucht, wenn ich die Funktion konkret aufrufe, kann der Compiler die automatisch aus dem Aufruf der Funktion ableiten. Das sehen Sie hier. Wenn ich xchg (a, b) sage, kann der Compiler automatisch Typen von a und b ableiten und ich muss ihn hier nicht explizit angeben beim Aufruf des Templates oder anders ausgedrückt bei der Instanziierung des Templates. Das ist im Gegensatz zu hier. nTimes ist ein weiteres Funktions-Template. Was macht nTimes? nTimes multipliziert zwei Zahlen. Die erste Zahl ist ein Template-Parameter 10. Die zweite Zahl ist ein Funktionsargument. Da N hier in dem Aufruf der Funktion nicht verwendet wird, müssen Sie es explizit angeben. Der Compiler kann das einfach nicht ableiten. Das Zweite ist das Funktionsargument und da läuft es wie eine normale Funktion. Genau dieser Tipp steht hier. Falls der Compiler die Template-Argumente aus den Funktionsargumenten nicht ableiten kann, müssen diese explizit angegeben werden. Das Ganze zeige ich Ihnen jetzt noch in der Anwendung. Die bekannte Funktion xchg diesmal mit einem Funktionskörper. Sie ist nicht besonders spannend. Sie nimmt zwei Werte x, y an, vertauscht die und das Entscheidende ist, sie ist mit dem Typ parametrisiert. Das heißt, dieses Funktions-Template kann für alle Typen angewendet werden, die Zuweisungen unterstützen. Also für sehr, sehr viele Typen. Das zeige ich Ihnen jetzt in der Anwendung. Ich habe ein bool t und f mit true und false. Ich wende xchg von t, f an. Was Sie bekommen ist, aus (true, false) wird (false, true). Hier ist der Aufruf des Funktions-Templates. Hier ist auch der Punkt, an dem das Funktions-Template instanziiert wird, wo es eine konkrete Funktion wird, wo die Typparameter T gebunden werden, in diesem Fall sind es Wahrheitswerte. Das sehen Sie, t und f ist dann das x und das y. Das bestimmt den Typparameter t und dann sehen Sie, von dem Punkt an wird t durch bool ersetzt und dann verhält es sich wie eine normale Funktion. Hier rufe ich sie auf. Sie sehen, aus (true, false) wird (false, true). Das Gleiche kann ich auch für Integers anwenden. int2011, int2014 ich wende xchg darauf an, und dann gebe ich es aus. Sie sehen, aus (first, second) wird (second, first). Was Sie natürlich jetzt auch sehen ist, dass ich in der Zeile verrutscht bin. Ich wollte natürlich diese Zeile hier darstellen. Aus (int2011, int2014) wird (2014, 2011). Die Werte werden also vertauscht. Hier ein kleiner Vorgriff. Das ganz Gleiche funktioniert natürlich auch noch für Strings. Aus (first, second) wird (second, first). Ich habe gesagt, alle Typen, die Zuweisungen unterstützen, kann ich hier verwenden. Das können durchaus anspruchsvollere Typen sein. Hier verwende ich einen std::vector von int und auf den kann ich xchg anwenden. Hier gebe ich die Elemente vom ersten Vektor aus in ihrer Reihenfolge. Also ich gebe aus 1 2 3 4 5 und dann gebe ich aus, ist diese Zeile, 5 4 3 2 1. Wenn ich jetzt xchg aufrufe, gebe ich zuerst aus 5 4 3 2 1 1 2 3 4 5. Ich gebe die Vektoren vertauscht aus. Nun habe ich Ihnen das Funktions-Template xchg vorgestellt. Jetzt kommt noch die Funktion nTimes, insbesondere das Funktions-Template nTimes. nTimes was macht das? Es bindet ein Template-Argument N und ein Funktionsargument n. Es bindet das Template-Argument N und addiert es mit dem Funktionsargument n. Das Ergebnis ist eine Multiplikation. Schaut ein bisschen strange aus, aber das verdeutlicht sehr gut, dass Sie in diesem Fall beim Aufruf des Funktions-Templates nTimes N angeben müssen und genau das sehen Sie hier unten. Ich rufe hier nTimes<5(10) auf. Groß 5 muss ich angeben, weil diesen Typ kann er nicht aus dem Argument der Funktion ableiten. Sie sehen, die 5 verwende ich hier nicht. 5 mal 10 gibt, das ist jetzt das Einfachste an dem Beispiel, 50. Genauso wie 10 mal 5 50 ergibt. In dieser Lektion habe ich Ihnen Funktions-Templates vorgestellt. Insbesondere habe ich Ihnen die Instanziierung von Funktions-Templates vorgestellt Die Instanziierung eines Funktions-Templates passiert immer genau dann, wenn Sie das Funktions-Template aufrufen, so wie hier. Dann ersetzt der Compiler die Typparameter, wie das t hier, durch die konkreten Funktionsargumente. Wenn der die Typparameter aus den Funktionsargumenten ableiten kann, dann müssen Sie die Typparameter nicht angeben. Das sehen Sie hier. Hier sehen Sie in keinster Weise, dass das ein Funktions-Template ist. Wenn er die Typparameter aber aus dem Funktionsargument nicht ableiten kann, in dem Fall hier, weil es N nicht in den Funktionsargumenten verwendet wird, dann müssen Sie den Template-Parameter angeben.

C++ Grundkurs

Steigen Sie in die mächtige Programmiersprache C++ ein und lernen Sie dabei alle wichtigen Funktionen mit Anwendungsbeispielen kennen.

8 Std. 14 min (147 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!