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

Yleiskatsaus

Pyyhkäise näyttääksesi valikon

Templaatteja käytetään luomaan geneeristä ja uudelleenkäytettävää koodia, mikä parantaa ohjelmien joustavuutta ja ylläpidettävyyttä merkittävästi. Tämä yleiskatsaus tiivistää kurssilla käsiteltävät keskeiset käsitteet ja osiot.

Templaatin luominen

Templaatin luontiin käytetään avainsanaa template, jota seuraavat kulmasulkeisiin sijoitetut templaattiparametrit. Alla on esimerkki perus templaattifunktiosta, joka ei ota parametreja.

template.h

template.h

12
template<typename> void SimpleTemplate() {}

Templaatit ja parametrit

Templaatit voivat myös ottaa parametreja, mikä tekee niistä monipuolisempia. Tässä esimerkissä näytetään, kuinka luodaan templaattifunktio, joka ottaa yhden geneerisen tyyppisen T-parametrin. Tämä mahdollistaa funktion käytön minkä tahansa tietotyypin kanssa instanssoinnin yhteydessä.

single_parameter.h

single_parameter.h

multiple_parameters.h

multiple_parameters.h

12
template<typename T> void SimpleTemplate(T value) {}

Luokkatemplaatit

Templaatteja voidaan käyttää myös luokkiin, jolloin voidaan luoda parametroitavia luokkamäärittelyjä. Seuraava esimerkki havainnollistaa, kuinka luodaan luokkatemplaatti, joka tallentaa geneerisen tyyppisen T arvon ja sisältää konstruktorin alustusta varten:

class_template.h

class_template.h

1234567
template<typename T> class ClassTemplate { private: T value; public: ClassTemplate(T value) : value(value) {} };

Mallin erikoistaminen

Mallin erikoistaminen mahdollistaa tietylle tietotyypille räätälöityjen toteutusten luomisen mallille. Tämä on hyödyllistä, kun geneerinen toteutus ei riitä tai kun tarvitaan erityistä toimintaa. Seuraava esimerkki näyttää, kuinka mallifunktio erikoistetaan eri tietotyypeille, kuten int, bool ja std::string:

specialization.h

specialization.h

1234567891011
template <typename T> void Template(const T& value) { /* ... */ } // Any Type template <> void Template<int>(const T& value) { /* ... */ } // For `int` template <> void Template<bool>(const T& value) { /* ... */ } // For `bool` template <> void Template<std::string>(const T& value) { /* ... */ } // For `std::string`
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Osio 4. Luku 5
some-alt