Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Gedeeltelijke Templatespecialisatie | Templatespecialisatie
C++-Templates

Gedeeltelijke Templatespecialisatie

Veeg om het menu te tonen

Templatespecialisatie voor een template met één parameter is eenvoudig, maar wordt complexer bij meerdere parameters. Hier komt gedeeltelijke templatespecialisatie van pas. Hiermee kun je een gespecialiseerde versie van een template maken voor specifieke subsets van types of waarden.

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; }

Syntax van gedeeltelijke templatespecialisatie

Gedeeltelijke templatespecialisatie kun je zien als een vorm van template-overloading. Dit zijn de regels die gevolgd moeten worden:

Bij gedeeltelijke specialisatie definieer je een nieuwe versie van een templatefunctie waarbij sommige parameters zijn vastgelegd op specifieke types, terwijl andere generiek blijven. De compiler gebruikt deze gespecialiseerde versie telkens wanneer overeenkomende types worden aangetroffen tijdens de template-instantiering.

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; }

Dat is één manier om template-specialisatie te gebruiken, maar er is een andere, meer voorkomende situatie.

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

Wat is partiële templatespecialisatie?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 4. Hoofdstuk 3
some-alt