टेम्प्लेट डिडक्शन गाइड एक टेम्प्लेट क्लास से जुड़े पैटर्न होते हैं जो कंपाइलर को क्लास के लिए कंस्ट्रक्टर तर्कों (और उनके प्रकारों) के एक सेट को ट्रांसलेट पैरामीटर में अनुवाद करने का तरीका बताते हैं।
इसका सबसे सरल उदाहरण std::vector
इसका निर्माणकर्ता है जो पुनरावृति जोड़ी लेता है।
template<typename Iterator>
void func(Iterator first, Iterator last)
{
vector v(first, last);
}
संकलक यह पता लगाने की क्या जरूरत vector<T>
के T
प्रकार किया जाएगा। हम जानते हैं कि उत्तर क्या है; T
होना चाहिए typename std::iterator_traits<Iterator>::value_type
। लेकिन हम संकलक को टाइप किए बिना कैसे बताएंगे vector<typename std::iterator_traits<Iterator>::value_type>
?
आप एक कटौती गाइड का उपयोग करते हैं:
template<typename Iterator> vector(Iterator b, Iterator e) ->
vector<typename std::iterator_traits<Iterator>::value_type>;
यह संकलक को बताता है कि, जब आप vector
उस पैटर्न से मेल खाते एक निर्माता को बुलाते हैं , तो यह vector
दाईं ओर कोड का उपयोग करके विशेषज्ञता को घटा देगा ->
।
आपको उन दिशानिर्देशों की आवश्यकता होती है जब तर्कों से प्रकार की कटौती उन तर्कों में से एक के प्रकार पर आधारित नहीं होती है। एक आरंभ किया जा रहा vector
एक से initializer_list
स्पष्ट रूप से उपयोग करता vector
है T
तो यह एक गाइड की जरूरत नहीं है,।
बाईं ओर आवश्यक रूप से एक वास्तविक निर्माता निर्दिष्ट नहीं करता है। जिस तरह से यह काम करता है, यदि आप एक प्रकार पर टेम्पलेट निर्माण कटौती का उपयोग करते हैं, तो यह उन तर्कों से मेल खाता है जो आप सभी कटौती गाइड के खिलाफ पास करते हैं (प्राथमिक टेम्पलेट के वास्तविक निर्माता अंतर्निहित गाइड प्रदान करते हैं)। यदि कोई मेल है, तो इसका उपयोग यह निर्धारित करने के लिए करता है कि किस प्रकार को प्रदान करने के लिए कौन से टेम्पलेट तर्क हैं।
लेकिन एक बार यह कटौती की जाती है, एक बार संकलक प्रकार के लिए टेम्पलेट मापदंडों का पता लगाता है, उस प्रकार की वस्तु के लिए इनिशियलाइज़ेशन ऐसा होता है जैसे कि कोई भी नहीं हुआ। यही है, चयनित कटौती गाइड को चयनित निर्माता से मेल नहीं खाता है ।
इसका अर्थ यह भी है कि आप समुच्चय और कुल आरंभ के साथ गाइड का उपयोग कर सकते हैं:
template<typename T>
struct Thingy
{
T t;
};
Thingy(const char *) -> Thingy<std::string>;
Thingy thing{"A String"};
इसलिए कटौती गाइडों का उपयोग केवल इस प्रकार का पता लगाने के लिए किया जाता है। आरंभीकरण की वास्तविक प्रक्रिया ठीक उसी तरह काम करती है जैसी पहले की थी, एक बार जो दृढ़ संकल्प कर ली गई है।