partial template specialization
Megjelenés
Főnév
partial template specialization (tsz. partial template specializations)
- (informatika) A partial template specialization (részleges sablon-specializáció) lehetővé teszi, hogy egy általános sablon egyes típusváltozataira speciálisabb implementációt adjunk, anélkül, hogy minden sablonparamétert rögzítenénk.
Ez kizárólag osztálysablonokra alkalmazható, függvénysablonokra nem.
🧱 Alapszintaxis
template<typename T1, typename T2>
class MyClass {
// általános implementáció
};
// részleges specializáció, ha a második paraméter `int`
template<typename T>
class MyClass<T, int> {
// specializált implementáció
};
📘 Példa – Alap és részleges sablon
🟦 Alap sablon
template<typename T1, typename T2>
class Duo {
public:
void info() {
std::cout << "Általános Duo<T1, T2>\n";
}
};
🟩 Részleges specializáció: ha T2 == int
template<typename T1>
class Duo<T1, int> {
public:
void info() {
std::cout << "Speciális Duo<T1, int>\n";
}
};
▶️ Használat
Duo<double, char> d1;
d1.info(); // Általános Duo<T1, T2>
Duo<float, int> d2;
d2.info(); // Speciális Duo<T1, int>
🔧 Speciális eset: pointer típusok
template<typename T>
class Trait {
public:
static void info() { std::cout << "Nem pointer\n"; }
};
template<typename T>
class Trait<T*> {
public:
static void info() { std::cout << "Pointer típus\n"; }
};
Trait<int>::info(); // Nem pointer
Trait<int*>::info(); // Pointer típus
🧩 Használható mintázatok
| Minta | Jelentés |
|---|---|
template<typename T> class X<T*> |
pointer típusokra |
template<typename T, int N> class X<T, N> |
részben fix típus |
template<typename T1> class X<T1, std::string> |
csak ha egyik típus std::string |
template<int N> class X<N> |
nem típus sablonparaméter |
❌ Mi nem működik?
- Függvénysablonok nem specializálhatók részlegesen:
// ❌ Ez nem érvényes
template<typename T>
void func(T x);
template<typename T>
void func<T*>(T* x); // Nem megengedett C++-ban
Helyette tag dispatch vagy std::enable_if használható (SFINAE).
✅ Összegzés
| Fogalom | Leírás |
|---|---|
| Partial specialization | Osztálysablon részleges testreszabása |
| Működik | Osztályokra ✔️ |
| Nem működik | Függvényekre ❌ |
| Használat célja | Típusfüggő viselkedés, optimalizáció, típusjellemzők |
| Haladó eszköz | SFINAE, enable_if, type traits kombinálva vele |
- partial template specialization - Szótár.net (en-hu)
- partial template specialization - Sztaki (en-hu)
- partial template specialization - Merriam–Webster
- partial template specialization - Cambridge
- partial template specialization - WordNet
- partial template specialization - Яндекс (en-ru)
- partial template specialization - Google (en-hu)
- partial template specialization - Wikidata
- partial template specialization - Wikipédia (angol)