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

Delvis Malspesialisering

Sveip for å vise menyen

Templatespesialisering for en mal med én parameter er enkel, men det blir mer komplisert med flere parametere. Dette er hvor delvis templatespesialisering kommer inn. Det gir deg mulighet til å lage en spesialisert versjon av en mal for bestemte delmengder av typer eller verdier.

main.cpp

main.cpp

12345678
// What if `T1` and `T2` are the same type? // Or what if you want to define special behavior when `T1` is a `std::string`? template<typename T1, typename T2> void TemplateExample(T1 first, T2 second) { std::cout << "Generic template!" << std::endl; }

Syntaks for delvis templatespesialisering

Delvis templatespesialisering kan betraktes som en form for mal-overlasting. Her er reglene som må følges:

Ved delvis spesialisering defineres en ny versjon av en malfunksjon der noen av parameterne er fastsatt til bestemte typer, mens andre forblir generiske. Kompilatoren bruker denne spesialiserte versjonen når den møter samsvarende typer under mal-instansiering.

main.cpp

main.cpp

123456789101112131415
#include <iostream> // Primary template template<typename T1, typename T2> bool IsSameType(T1 first, T2 second) { return false; } // Partial specialization for when both types are the same template<typename T> bool IsSameType(T first, T second) { return true; } int main() { std::cout << IsSameType(10, 'a') << std::endl; std::cout << IsSameType("Hello", "World") << std::endl; }

Dette er én måte å bruke malspesialisering på, men det finnes et annet, mer vanlig scenario.

main.cpp

main.cpp

123456789101112131415
#include <iostream> // Primary template template <typename T1, typename T2> // General case void Template(T1 a, T2 b) { std::cout << "General" << std::endl; } // Partial specialization for when `T1` is `bool` template <typename T2> // Special case when the first type is `bool` void Template(bool a, T2 b) { std::cout << "Special" << std::endl; } int main() { Template(false, 25); Template(100, 300); }
question mark

Hva er delvis malspesialisering?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3

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 3
some-alt