template<> // empty <> = "koi free parameters nahi bache"struct TypeName<int> { // <int> = exact type jiske liye hum override kar rahe hain static const char* name() { return "int"; }};
template<> kyun? Tumne har parameter fill kar diya, toh zero parameters bache — angle brackets empty hain. Naam ke baad <int> batata hai ki tum kaunsi instantiation replace kar rahe ho.
template<class T> // T abhi bhi free haistruct TypeName<T*> { // lekin humne SHAPE "T ki taraf pointer" match ki static const char* name() { return "pointer"; }};template<class A, class B>struct TypeName<pair<A,B>> { // koi bhi pair match karta hai, A aur B abhi bhi free hain static const char* name() { return "pair"; }};
Yeh "partial" kyun hai? Tumne type ko ek concrete cheez par pin nahi kiya — tumne uski structure pin ki jabki T (ya A,B) open rakha. Toh yeh puri ek family cover karta hai.
FULL specialization kaunse keyword sequence se shuru hoti hai?
template<> (empty angle brackets — zero free parameters bache hain).
Full vs partial specialization ek-ek line mein?
Full = saare template params concrete types par fixed; partial = kuch params fixed YA shape constrained, params abhi bhi free hain.
Kya function templates ko PARTIALLY specialize kar sakte hain?
Nahi — sirf fully. Partial jaisa behaviour ke liye overloading use karo.
Type int* ke liye, kaun jeetta hai: primary T ya partial T*?
T* — yeh zyada specialized hai (T ke strict subset ko match karta hai).
Compiler specializations mein ambiguity kab report karta hai?
Jab do partial specializations match karein lekin koi bhi dusre se zyada specialized na ho.
Specialization first use ke relative kahan declare honi chahiye?
Type ki pehli instantiation se pehle, aur primary ke same namespace mein.
Kaunsa real STL feature partial specialization se bana hai?
Type traits jaise std::is_pointer, aur std::vector<bool> (full-ish container specialization).
std::vector<bool>std::vector<int> se alag kyun hai?
Yeh ek specialization hai jo booleans ko bit-pack karti hai space bachane ke liye, isliye yeh real bool objects store nahi karta.
Specializations ki "partial ordering" kya hai?
Woh rule jo kehta hai spec A, B se zyada specialized hai agar A se match karne wali har type B se bhi match kare lekin ulta nahi.
Kya ek partial specialization ek NAYA default template argument add kar sakti hai?
Nahi — default template arguments sirf primary template par hote hain.
Recall Feynman: 12-saal ke bachche ko explain karo
Socho ek vending machine jo koi bhi filling maango uske liye sandwich banati hai — woh hai generic template. Lekin peanut butter ke liye, tumhare paas ek secret special recipe hai (jelly bhi dalo!) — woh hai full specialization: sirf us exact filling ke liye trigger hoti hai. Ab maano kisi bhi tin can mein aane wali cheez ke liye tum pehle use kholna chahte ho — woh hai partial specialization: ise koi farq nahi padta can mein kya hai, bas yeh "can-shaped" honi chahiye. Jab tum button dabate ho, machine check karti hai: koi exact special recipe hai? Use karo. Warna, koi "shape" recipe fit hoti hai? Sabse specific wali use karo. Warna, boring generic recipe use karo.