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

Delvis Templatespecialisering

Stryg for at vise menuen

Templatespecialisering for en enkelt-parameter skabelon er ligetil, men det bliver mere komplekst med flere parametre. Her kommer delvis templatespecialisering ind i billedet. Det giver mulighed for at oprette en specialiseret version af en skabelon for specifikke undergrupper af typer eller værdier.

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 templatespecialisering

Delvis templatespecialisering kan opfattes som en form for template-overload. Her er reglerne, der skal følges:

Ved delvis specialisering defineres en ny version af en skabelonfunktion, hvor nogle af dens parametre er fastsat til specifikke typer, mens andre forbliver generiske. Kompileren anvender denne specialiserede version, når den støder på matchende typer under skabeloninstansiering.

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åde at anvende skabelonspecialisering på, men der findes et andet og mere almindeligt scenarie.

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

Hvad er delvis templatespecialisering?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 3

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