Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Introduction to Template Specialization | Templatespezialisierung
C++-Templates

Introduction to Template Specialization

Swipe um das Menü anzuzeigen

Eine allgemeine Vorlage funktioniert für jeden Datentyp. Bestimmte Typen erfordern jedoch eine spezielle Behandlung. Wenn beispielsweise eine Funktion für int und std::string unterschiedlich arbeiten soll, ermöglicht die Templatespezialisierung, für jeden Typ eine eigene Version der Vorlage zu definieren.

main.cpp

main.cpp

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"); }

Beim Ausführen des obigen Codes tritt ein Fehler auf. Dies liegt daran, dass std::string den Operator * nicht unterstützt. Daher muss dem Compiler mitgeteilt werden, wie ein als Parameter übergebener std::string behandelt werden soll.

Wie Templates im Hintergrund funktionieren

Im Moment werden nur die Grundlagen von Templates, insbesondere Funktionstemplates, vermittelt. Es wurde gezeigt, wie man sie erstellt, Parameterlisten verwendet und die Funktionen mit verschiedenen Datentypen aufruft. Es stellt sich die Frage, warum in diesem Fall nicht einfach Funktionen für alle verfügbaren numerischen Typen in C++ überladen werden. Obwohl dieser Ansatz für dieses Beispiel funktionieren könnte, ist es wichtig zu beachten, dass Templates ein wesentlich mächtigeres Werkzeug sind.

main.cpp

main.cpp

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 die ausschließliche Verwendung von Funktionsüberladung bedeuten, für jeden Typ eine neue Funktion zu erstellen, was Aktualisierungen umständlich und fehleranfällig macht. Daher kann nicht ausschließlich auf Funktionsüberladung gesetzt werden; Templatespezialisierungen sind notwendig, um Probleme wie im square-Template-Funktion zu lösen.

question mark

Warum verursacht die Funktionsvorlage 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

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 4. Kapitel 1
some-alt