Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Introduktion til templatespecialisering | Templatespecialisering
C++ Templates

Introduktion til templatespecialisering

Stryg for at vise menuen

En generel skabelon fungerer for enhver datatype. Visse typer kan dog kræve særlig behandling. For eksempel, hvis du implementerer en funktion, der opfører sig forskelligt for int og std::string typer, giver skabelonspecialisering dig mulighed for at definere en anden version af skabelonen for hver type.

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

Hvis du kører koden ovenfor, vil du støde på en fejl. Dette sker, fordi std::string ikke understøtter *-operatoren. Derfor er det nødvendigt at informere compileren om, hvordan en std::string, der gives som parameter, skal håndteres.

Hvordan skabeloner fungerer under motorhjelmen

Lige nu får du kun fat i det grundlæggende om skabeloner, specifikt funktionsskabeloner. Du har lært, hvordan man opretter dem, bruger parameterlister og kalder funktionerne med forskellige datatyper. Du undrer dig måske over, hvorfor vi i dette tilfælde ikke bare overbelaster funktioner for alle tilgængelige numeriske typer i C++. Selvom denne tilgang kunne fungere for dette eksempel, er det vigtigt at huske, at skabeloner er et langt mere kraftfuldt værktøj.

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

Skabeloner kan acceptere enhver datatype, inklusive brugerdefinerede typer. Til sammenligning ville det udelukkende at stole på funktionsoverbelastning kræve, at man opretter en ny funktion for hver type, hvilket gør opdateringer besværlige og fejlbehæftede. Derfor kan vi ikke nøjes med funktionsoverbelastning alene og må bruge skabelonspecialiseringer for at håndtere problemer som dem i square-skabelonfunktionen.

question mark

Hvorfor giver square-funktionens template i eksemplet en fejl, når std::string bruges?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 4. Kapitel 1
some-alt