Kursinhalt
C++-Vorlagen
C++-Vorlagen
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.
main
#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.
main
#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.
Danke für Ihr Feedback!