Ugrás a tartalomhoz

partial template specialization

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


Főnév

partial template specialization (tsz. partial template specializations)

  1. (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