Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Översikt | Templatespecialisering
C++-Mallar

Översikt

Svep för att visa menyn

Mallfunktioner gör det möjligt för utvecklare att skapa generisk och återanvändbar kod, vilket avsevärt ökar flexibiliteten och underhållbarheten i program. Denna översikt sammanfattar de viktigaste begreppen och avsnitten som behandlas i kursen.

Skapande av mallar

Syntaxen för att skapa en mall inkluderar nyckelordet template följt av mallparametrar inom vinkelparenteser. Nedan visas ett exempel på en grundläggande mallfunktion som inte tar några parametrar.

template.h

template.h

12
template<typename> void SimpleTemplate() {}

Mallar och parametrar

Mallar kan också ta emot parametrar, vilket gör dem mer mångsidiga. Här visar vi hur man skapar en mallfunktion som tar en enda parameter av en generisk typ T. Detta gör att funktionen kan arbeta med vilken datatyp som helst som anges vid instansiering.

single_parameter.h

single_parameter.h

multiple_parameters.h

multiple_parameters.h

12
template<typename T> void SimpleTemplate(T value) {}

Klassmallar

Mallar kan även användas för klasser, vilket möjliggör skapandet av klassdefinitioner som är parameteriserade. Följande exempel visar hur man skapar en klassmall som lagrar ett värde av en generisk typ T och inkluderar en konstruktor för initiering:

class_template.h

class_template.h

1234567
template<typename T> class ClassTemplate { private: T value; public: ClassTemplate(T value) : value(value) {} };

Templatespecialisering

Templatespecialisering möjliggör skapandet av specifika implementationer av en mall för särskilda datatyper. Detta är användbart när en generell implementation inte är tillräcklig eller när särskilt beteende krävs. Följande exempel visar hur man specialiserar en mallfunktion för olika datatyper, inklusive int, bool och std::string:

specialization.h

specialization.h

1234567891011
template <typename T> void Template(const T& value) { /* ... */ } // Any Type template <> void Template<int>(const T& value) { /* ... */ } // For `int` template <> void Template<bool>(const T& value) { /* ... */ } // For `bool` template <> void Template<std::string>(const T& value) { /* ... */ } // For `std::string`
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 5

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 4. Kapitel 5
some-alt