Introductie tot Templatespecialisatie
Veeg om het menu te tonen
Een algemene template werkt voor elk gegevenstype. Bepaalde types kunnen echter speciale behandeling vereisen. Bijvoorbeeld, als je een functie implementeert die zich anders gedraagt voor int en std::string types, stelt template-specialisatie je in staat om een andere versie van de template voor elk type te definiëren.
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"); }
Als je de bovenstaande code uitvoert, krijg je een fout. Dit gebeurt omdat std::string de *-operator niet ondersteunt. Daarom is het noodzakelijk om de compiler te informeren hoe om te gaan met een std::string die als parameter wordt doorgegeven.
Hoe templates onder de motorkap werken
Op dit moment ben je bezig met het begrijpen van de basisprincipes van templates, specifiek functietemplates. Je hebt geleerd hoe je ze maakt, parameterlijsten gebruikt en de functies aanroept met verschillende datatypen. Je vraagt je misschien af waarom we in dit geval niet gewoon functies zouden overloaden voor alle beschikbare numerieke typen in C++. Hoewel deze aanpak voor dit voorbeeld zou kunnen werken, is het belangrijk om te onthouden dat templates een veel krachtiger hulpmiddel zijn.
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 kunnen elk datatype accepteren, inclusief door de gebruiker gedefinieerde typen. In tegenstelling tot alleen vertrouwen op functie-overloading, zou je voor elk type een nieuwe functie moeten maken, wat het bijwerken omslachtig en foutgevoelig maakt. Daarom kunnen we niet alleen vertrouwen op functie-overloading en moeten we templatespecialisaties gebruiken om problemen zoals die in de square-templatefunctie op te lossen.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.