Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Introductie tot Templatespecialisatie | Templatespecialisatie
C++-Templates

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

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

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.

question mark

Waarom veroorzaakt de functie-template square in het voorbeeld een fout wanneer std::string wordt gebruikt?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 1

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 4. Hoofdstuk 1
some-alt