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
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
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
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); }
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår