जिस पर चर्चा की जा रही है वह अनिवार्य रूप से एक पुश-आधारित प्रसंस्करण पद्धति और एक पुल-आधारित के बीच का अंतर है। इस पाइप लाइब्रेरी की तरह एक पुश-सिस्टम में, आप प्रसंस्करण की एक श्रृंखला स्थापित करते हैं, और प्रत्येक प्रसंस्करण चरण सीधे अपने डेटा को अगले में धकेलता है। श्रेणियों की तरह एक पुल-सिस्टम में, आप डेटा का एक प्रतिनिधित्व स्थापित करते हैं, जिसे आप आवश्यकतानुसार एक्सेस और संशोधित कर सकते हैं। प्रसंस्करण अपने आप नहीं होता है; यह तभी होता है जब कोई व्यक्ति सीमा का उपभोग करने का प्रयास करता है।
unzip
और fork
संचालन दोनों एक-से-कई आपरेशनों हैं: वे एक ही इनपुट लेने के लिए और कई प्रोसेसिंग आपरेशन से मैप करें।
एक धक्का प्रणाली के रूप में, पाइप लाइब्रेरी अपने एपीआई की संरचना के कारण एक-से-कई संचालन को संभाल सकती है। एक ऑपरेशन एक फ़ंक्शन कॉल द्वारा दर्शाया गया है; इनपुट का उपयोग करने के बिंदु से निहित है ( >>=
किसी प्रोसेसर का उपयोग या इसे पारित करना)। फ़ंक्शन के पैरामीटर इसके आउटपुट को परिभाषित करते हैं (स्वयं प्रोसेसर के लिए निर्धारित मापदंडों की अनदेखी)। और चूंकि C ++ फ़ंक्शंस में मापदंडों की मनमानी संख्या हो सकती है, एक-से-कई मैपिंग ऑपरेशन स्वाभाविक रूप से बाहर हो जाते हैं। आप बस विभिन्न आउटपुट के लिए उचित प्रोसेसर की आपूर्ति करते हैं।
पुल प्रणाली के रूप में, रेंज रिटर्न वैल्यू पर आधारित होती है। C ++ में कई मानों को वापस करने के लिए कोई भाषा तंत्र नहीं है, इसलिए हम जो सबसे अच्छा कर सकते हैं वह है "मान" जो कई मूल्यों का प्रतिनिधित्व करता है।
हालाँकि, रेंज अडैप्टर चेनिंग अंतत: इनपुट्स रेंज पर आधारित है । और एक "'मूल्य' जो कई मूल्यों का प्रतिनिधित्व करता है" स्वयं एक सीमा नहीं है। इसमें श्रेणियां शामिल हो सकती हैं, लेकिन यह इसे सीमा नहीं बनाती है।
तो अब आपको यह निश्चित रूप से "एक सीमा नहीं" प्रकार लेना होगा और अपने सभी रेंज एडेप्टर को इसके साथ काम करना होगा। एक रेंज अडैप्टर लगाने से उस ऑपरेशन को पूरे टाइप में प्रसारित करना होगा, जिससे कई-कई ऑपरेशन हो सकते हैं। ऐसा करना आसान नहीं है।
लेकिन इससे भी महत्वपूर्ण बात ... यह वह नहीं है जो आप चाहते हैं । यदि आप fork
एक सीमा रखते हैं, तो आप लगभग निश्चित रूप से प्रतिकृति श्रेणियों पर अलग-अलग प्रसंस्करण करना चाहते हैं। और ऐसा करने के लिए |
ऑपरेशन का उपयोग करने के किसी भी अवसर को पूरी तरह से बंद कर देता है। आपको इन रेंज-ट्यूपल्स के विशिष्ट भागों में एडेप्टर लगाने के तरीके बनाने होंगे। और वे तरीके तेजी से एक पुश-आधारित प्रोसेसर की तरह दिखने वाले हैं।
दिन के अंत में, पुल-स्टाइल सिस्टम में प्रत्येक स्तर पर केवल एक आउटपुट होता है। यह इस तरह के एपीआई की मुख्य अवधारणा का हिस्सा है: प्रत्येक प्रसंस्करण कदम एक सीमा उत्पन्न करता है । इसके फायदे (आलसी प्रसंस्करण) हैं, लेकिन एक-से-कई संचालन का प्रतिनिधित्व करना इसके कमजोर क्षेत्रों में से एक है।
रंग निश्चित रूप से एक unzip
फ़ंक्शन हो सकता है ( fork
यह वास्तव में सिर्फ सीमा की नकल है)। लेकिन यह |
स्टाइल एडॉप्टर नहीं होगा ; यह एक ऐसा फंक्शन होगा जो कुछ डीकंपोज़ल टाइप पर रेंज लेता है और रेंज का एक टपल देता है। यदि आप उनके साथ अधिक प्रसंस्करण करना चाहते हैं, तो आपको टपल को एक मूल्य में संग्रहीत करने की आवश्यकता है, व्यक्तिगत तत्वों तक पहुंचें, और जैसा कि आप फिट देखते हैं, उनका उपयोग करें।