Ugrás a tartalomhoz

template specialization

A Wikiszótárból, a nyitott szótárból


Főnév

template specialization (tsz. template specializations)

  1. (informatika)

A template specialization C++-ban azt jelenti, hogy egy általános sablon (template) helyett egy vagy több konkrét típusra külön implementációt adunk meg. Ez lehetővé teszi, hogy speciális eseteket hatékonyabban vagy eltérően kezeljünk.



🔧 Alaptípusai

  1. Full specialization (teljes specializáció): minden sablonparaméter rögzített
  2. Partial specialization (részleges specializáció): csak egyes paraméterek rögzítettek



📦 Alap template

template<typename T>
class Print {
public:
    void operator()(const T& value) {
        std::cout << "Általános típus: " << value << "\n";
    }
};

Teljes specializáció

template<>
class Print<std::string> {
public:
    void operator()(const std::string& value) {
        std::cout << "Szöveg: \"" << value << "\"\n";
    }
};

Használat:

Print<int>()(42);             // Általános
Print<std::string>()("alma"); // Specializált

🧩 Részleges specializáció

template<typename T>
class Container<T*> {  // pointer típusokra specializált
public:
    void info() {
        std::cout << "Ez egy pointer típus\n";
    }
};

🎯 Miért hasznos?

Helyzet Példa
Egyes típusokat máshogy kell kezelni pl. karakterláncokat külön
Optimalizáció speciális típusokra pl. bool-ra bitcsomagolás
Egységes interfész, külön implementáció sablonokkal



⚠️ Fontos szabályok

  • A teljes specializáció külön template<> prefixet igényel
  • Részleges specializáció csak osztályokra alkalmazható, függvényekre nem
  • Függvény specializációhoz külön megközelítés (lásd lent)



📘 Függvény sablon specializálása

C++ nem támogatja a részleges specializációt függvényeknél, de támogatja a teljes specializációt.

Alap sablon:

template<typename T>
void print(const T& x) {
    std::cout << "Általános: " << x << "\n";
}

Teljes specializáció:

template<>
void print<std::string>(const std::string& x) {
    std::cout << "Szöveg: \"" << x << "\"\n";
}

🧪 Példa: bool optimalizálás

template<typename T>
class Flags {
    T values[8];
};

template<>
class Flags<bool> {
    unsigned char flags;  // bitenkénti tárolás
};

✅ Összegzés

Fogalom Leírás
Template specialization Sablon testreszabása adott típus(ok)ra
Full specialization Minden sablonparaméter ismert
Partial specialization Egyes paraméterek rögzítettek
Függvény specializálás Csak teljes specializáció lehetséges
Haszon Hatékonyság, testreszabhatóság, kód újrafelhasználás