Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Einführung in die Template-Spezialisierung | Templatespezialisierung
C++-Vorlagen
course content

Kursinhalt

C++-Vorlagen

C++-Vorlagen

1. Erstellen der Ersten Vorlage
2. Verwendung von Templates
3. Klassenvorlagen
4. Templatespezialisierung

book
Einführung in die Template-Spezialisierung

Ein allgemeines Template funktioniert für jeden Datentyp. Bestimmte Typen erfordern jedoch möglicherweise eine spezielle Behandlung. Wenn Sie beispielsweise eine Funktion implementieren, die sich für int- und std::string-Typen unterschiedlich verhält, ermöglicht die Templatespezialisierung Ihnen, eine andere Version des Templates für jeden Typ zu definieren.

cpp

main

copy
123456789101112
#include <iostream> template<typename T> T square(T value) { return value * value; } int main() { std::cout << square<int>(25); std::cout << square<std::string>("5"); }

Wenn Sie den obigen Code ausführen, wird ein Fehler auftreten. Dies geschieht, weil std::string den *-Operator nicht unterstützt. Daher ist es notwendig, dem Compiler mitzuteilen, wie ein std::string, der als Parameter übergeben wird, behandelt werden soll.

Wie Templates im Hintergrund funktionieren

Im Moment erfassen Sie nur die Grundlagen von Templates, insbesondere Funktionstemplates. Sie haben gelernt, wie man sie erstellt, Parameterlisten verwendet und die Funktionen mit verschiedenen Datentypen aufruft. Sie fragen sich vielleicht, warum wir in diesem Fall nicht einfach Funktionen für alle verfügbaren numerischen Typen in C++ überladen würden. Während dieser Ansatz für dieses Beispiel funktionieren könnte, ist es wichtig zu bedenken, dass Templates ein viel mächtigeres Werkzeug sind.

cpp

main

copy
12345678910111213
#include <iostream> struct myStruct {}; class myClass {}; template<typename T> void TemplateFunction() { std::cout << typeid(T).name() << std::endl; } int main() { TemplateFunction<myClass>(); TemplateFunction<myStruct>(); }

Templates können jeden Datentyp akzeptieren, einschließlich benutzerdefinierter Typen. Im Gegensatz dazu würde das ausschließliche Verlassen auf Funktionsüberladung erfordern, für jeden Typ eine neue Funktion zu erstellen, was Aktualisierungen umständlich und fehleranfällig macht. Daher können wir uns nicht allein auf Funktionsüberladung verlassen und müssen Templatespezialisierungen verwenden, um Probleme wie die im Quadrat-Template-Funktion zu lösen.

Warum erzeugt die Funktionstemplate square im Beispiel einen Fehler, wenn std::string verwendet wird?

Warum erzeugt die Funktionstemplate square im Beispiel einen Fehler, wenn std::string verwendet wird?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 1
We're sorry to hear that something went wrong. What happened?
some-alt