Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Oversikt | Templatespesialisering
C++-Maler

Oversikt

Sveip for å vise menyen

Maler gjør det mulig for utviklere å lage generisk og gjenbrukbar kode, noe som øker fleksibiliteten og vedlikeholdbarheten til programmer betydelig. Denne oversikten oppsummerer de viktigste konseptene og seksjonene som dekkes i kurset.

Opprettelse av maler

Syntaksen for å opprette en mal inkluderer nøkkelordet template etterfulgt av malparametere omsluttet av vinkelparenteser. Nedenfor vises et eksempel på en grunnleggende malfunksjon som ikke tar noen parametere.

template.h

template.h

12
template<typename> void SimpleTemplate() {}

Maler og parametere

Maler kan også motta parametere, noe som gjør dem mer allsidige. Her viser vi hvordan man lager en malfunksjon som tar én parameter av en generisk type T. Dette gjør at funksjonen kan brukes med hvilken som helst datatypen som oppgis ved instansiering.

single_parameter.h

single_parameter.h

multiple_parameters.h

multiple_parameters.h

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

Klassemaler

Maler kan også brukes på klasser, slik at man kan lage klassedefinisjoner som er parameteriserte. Eksempelet under viser hvordan man lager en klassemal som lagrer en verdi av en generisk type T og inkluderer en konstruktør for initialisering:

class_template.h

class_template.h

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

Templatespesialisering

Templatespesialisering gir mulighet for å lage spesifikke implementasjoner av en mal for bestemte datatyper. Dette er nyttig når en generell implementasjon ikke er tilstrekkelig, eller når spesiell oppførsel er nødvendig. Følgende eksempel viser hvordan man kan spesialisere en malfunksjon for ulike datatyper, inkludert int, bool og 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`
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 5

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 4. Kapittel 5
some-alt