2016-07-27 3 views
6

सादा और सरल: सामान्य अधिभार रिज़ॉल्यूशन पर टैग प्रेषण का लाभ क्या है?सामान्य अधिभार रिज़ॉल्यूशन पर टैग प्रेषण के लाभ

ये दोनों संकलन-समय प्रक्रियाएं सही हैं? तो मुझे लगता है कि 'प्रदर्शन विजेता' नहीं होना चाहिए। और प्रत्येक टैग प्रेषण मामले कुछ हद तक, सामान्य ओवरलोडिंग (संभवतः कई प्रकार जोड़कर) में फिर से लिखने/दोबारा करने के लिए सक्षम होना चाहिए, है ना?

काम करने और उम्मीदवारों के चयन के विभिन्न तरीकों के अलावा, मुझे ओवरलोड रिज़ॉल्यूशन पर टैग प्रेषण क्यों पसंद करना चाहिए और किस मामले में?

+7

टैग आधारित प्रेषण – Arunmu

उत्तर

7

Tag dispatching मूल रूप से सही ओवरलोडेड फ़ंक्शन खोजने के लिए नियोजित तकनीक को दिया गया नाम है। तो, तकनीकी रूप से यह केवल अधिभार के अलावा कुछ भी नहीं है।

Boost साइट से कहें:

टैग भेजने एक प्रकार के गुणों के आधार प्रेषण करने के लिए अधिक भार फ़ंक्शन का उपयोग करने का एक तरीका है, और अक्सर लक्षण वर्गों के साथ हाथ में हाथ जाता है।

आप इसे मानक पुस्तकालय algorithm शीर्षलेख फ़ाइल में उपयोग कर सकते हैं। बस एक उदाहरण के लिए, मान लें कि एक एल्गोरिदम AlgoX है जिसे एक कंटेनर पर बिडरेक्शनल एक्सेस (list) प्रदान करने वाले कंटेनर से यादृच्छिक पहुंच (जैसे vector) प्रदान करने वाले कंटेनर पर बहुत अधिक कुशलता से किया जा सकता है। तो, एल्गोरिथ्म के चयन के लिए iterator type पर आधारित एक सरल मन में iterator_traits

template <typename Iter> 
void AlgoXImpl(Iter first, Iter last, bidirectional_iterator_tag) { 
    //.....Algo specialized to bidirectional iterators 
} 

template <typename Iter> 
void AlgoXImpl(Iter first, Iter last, random_access_iterator_tag) { 
    //.....Algo specialized to random access iterators 
} 

template <typename Iter> 
void AlgoX(Iter first, Iter last) { 
    if (first == last) return; 
    AlgoXImpl(first, last, typename iterator_traits<Iter>::iterator_category()); 
} 

का उपयोग कर भेजने टैग का प्रयोग करेंगे जैसा कि आप देख सकते हैं, यह अधिक भार के रूप में श्रेणियों के अनिवार्य रूप से विभिन्न प्रकार हैं ऑपरेटर का एक उदाहरण है, लेकिन कुछ भी नहीं है।

एक और वास्तविक दुनिया उदाहरण के लिए, आप चेकआउट कर सकते हैं कि कैसे std::rotate लागू किया गया है।

+0

ओवरलोडिंग के माध्यम से हासिल किया जाता है तथ्य यह है कि टैग प्रेषण का भारी उपयोग किया जाता है, इस सवाल का जवाब नहीं दिया जाता है कि इसका उपयोग क्यों किया जाता है। ओपी सही ढंग से नोट करता है कि इसके प्रभाव के तहत प्रकार पदानुक्रमों में सादे विधि ओवरलोडिंग द्वारा इसके प्रभाव आसानी से प्राप्त किए जा सकते हैं। इसलिए, निर्णायक तर्क वास्तव में एक कस्टम प्रेषण योजना को लागू करना है जिसे टाइप परिभाषाओं से हटा दिया गया है। नीचे मेरा जवाब देखें। –

+0

मेरे उत्तर का सारांश मूल रूप से पहली 4-5 रेखाएं है, न कि इसका उपयोग एसटीएल में किया जाता है। – Arunmu

+0

इस उत्तर के पूरक के लिए बड़ा सवाल: ** टैग कुछ हद तक तेज़ wrt सामान्य अधिभार को प्रेषित कर रहा है? ** मुझे लगता है कि वे दोनों संकलित समय पर लागू नहीं हैं, लेकिन मैं अभी भी पूछ रहा हूं .. बस सुनिश्चित करने के लिए। – Dean

2

टैग उपयुक्त गुण वर्गों के माध्यम से, मूल आदिम प्रकारों सहित, एक प्रकार से जुड़े किए जा सकते हैं। उदाहरण के लिए, एक सूचक को कुछ इटरेटर अवधारणा के उप-वर्ग बनाना असंभव होगा। हालांकि, एक टेम्पलेटेड विशेषता वर्ग इसे वांछित टैग से जोड़ सकता है। इस प्रकार, टैग-आधारित प्रेषण लचीलापन जोड़ता है जो एक प्रेषण योजना बनाने की अनुमति देता है जिसे पहले से शामिल प्रकारों द्वारा परिभाषित नहीं किया जाना चाहिए।

संबंधित मुद्दे