template specialization
Megjelenés
Főnév
template specialization (tsz. template specializations)
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
- Full specialization (teljes specializáció): minden sablonparaméter rögzített
- 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 |
- template specialization - Szótár.net (en-hu)
- template specialization - Sztaki (en-hu)
- template specialization - Merriam–Webster
- template specialization - Cambridge
- template specialization - WordNet
- template specialization - Яндекс (en-ru)
- template specialization - Google (en-hu)
- template specialization - Wikidata
- template specialization - Wikipédia (angol)