Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Osittainen Mallin Erikoistaminen | Template-erikoistelu
C++-Template-Luokat

Osittainen Mallin Erikoistaminen

Pyyhkäise näyttääksesi valikon

Yhden parametrin mallin erikoistaminen on suoraviivaista, mutta moniparametrisissa malleissa se muuttuu monimutkaisemmaksi. Tällöin osittainen mallin erikoistaminen tulee avuksi. Sen avulla voidaan luoda erikoistettu versio mallista tiettyjä tyyppien tai arvojen osajoukkoja varten.

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

Osittaisen mallin erikoistamisen syntaksi

Osittaista mallin erikoistamista voi ajatella eräänlaisena mallin ylikuormituksena. Tässä ovat noudatettavat säännöt:

Osittaisessa erikoistuksessa määritellään uusi versio mallifunktiosta, jossa osa parametreista on kiinnitetty tiettyihin tyyppeihin ja loput jätetään geneerisiksi. Kääntäjä käyttää tätä erikoistettua versiota aina, kun se kohtaa vastaavat tyypit mallin ilmentämisen aikana.

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

Tämä on yksi tapa käyttää mallin erikoistusta, mutta on olemassa toinen, yleisempi tapaus.

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

Mitä on osittainen mallin erikoistaminen?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 4. Luku 3
some-alt