c++ - What is the use of the nested pointer type in iterator_traits? -


std :: iterator_traits वर्ग टेम्पलेट 5 नेस्टेड प्रकार को परिभाषित करता है: iterator_category , मूल्य_प्रकार , अंतर_प्रकार , सूचक और संदर्भ & lt; एल्गोरिथ्म & gt; दोनों लाइब्रेक + + और लिबस्टडीसी + + के शीर्ष लेखों को ब्राउज करना, कोई भी value_type , अंतर_प्रकार और के कई उपयोग देख सकता है Iterator_category , लेकिन केवल संदर्भ के लिए ( std :: iter_swap के अंदर) और pointer के लिए कोई नहीं।

मेरा अनुप्रयोग एक हाथ से निर्मित प्रॉक्सी इटरेटर / प्रॉक्सी संदर्भ जोड़ी का उपयोग करता है। मैं बूस्ट iterator_facade का उपयोग करने के लिए संक्रमण करना चाहता हूं, जिससे मुझे संदर्भ प्रकार को डिफ़ॉल्ट T & amp; से एक मनमाना प्रकार से कॉन्फ़िगर किया जा सकता है, लेकिन सूचक प्रकार के लिए ऐसा नहीं है जो < कोड> T * डिफ़ॉल्ट रूप से मैं नीडिंत सूचक प्रकार के कुछ गहराई से छिपी उपयोग द्वारा काट नहीं पा रहा हूं।

ध्यान दें : इटरेटर बिना एक अंतर्निहित प्रकार के प्रॉक्सी है नेस्टेड सदस्य हैं, इसलिए मुझे operator-> (जिसके लिए वापसी का प्रकार pointer होगा) के साथ संगतता की आवश्यकता नहीं है।

प्रश्न : नेस्टेड टाइप सूचक अंदर iterator_traits ?

पहले तीन प्रकारों के विपरीत iterator_category , value_type और अंतर_प्रकार (जो पिछले दो प्रकारों सूचक और संदर्भ अंदर iterator_traits दिखाई देते हैं Iterator_traits प्रकट होते हैं किसी भी एल्गोरिदम द्वारा उपयोग नहीं करने के लिए, लेकिन इटरेटर आवश्यकता के अनुपालन को परिभाषित करने के लिए उपयोग किया जाता है S।

24.2.1 सामान्य में [iterator.requirements.general]

1 [..] सभी iterators i < / कोड> जिसके लिए अभिव्यक्ति (* i)। एम अच्छी तरह से है, अभिव्यक्ति का i-> m उसी शब्दों के साथ < कोड> (* i) मीटर । [...]

24.4.1 इटरेटर गुण [iterator.traits]

[...] इसके अतिरिक्त , प्रकार

  iterator_traits & lt; इटरेटर & gt; :: संदर्भ iterator_traits & lt; इटरेटर & gt; :: सूचक   

डीटर के रूप में हो सकता है Iterator? ? संदर्भ और सूचक प्रकार, अर्थात, एक इरेरेटर ऑब्जेक्ट a के लिए, * a और a- & gt; , क्रमशः। [...]

डिफ़ॉल्ट मान T * और T के लिए सूचक और संदर्भ निश्चित रूप से इटरेटर आवश्यकताओं को पूरा करता है। प्रॉक्सी संदर्भों के बारे में, निर्दिष्ट करता है

एक पठनीय इटरेटर (और आज का इनपुट इटरेटर) का संदर्भ प्रकार वास्तव में एक संदर्भ नहीं है, इसलिए जब तक यह परिवर्तनीय इटरेटर के मूल्य_प्रकार से जब value_type एक वर्ग है, फिर भी, operator- & gt; के माध्यम से सदस्यों तक पहुंचना अब भी संभव है। इसलिए, एक इरेरेक्टर जिसका संदर्भ प्रकार वास्तव में नहीं है, संदर्भ में एक प्रॉक्सी में उसकी operator-> gtc: से संदर्भित मान की प्रतिलिपि वापस करनी होगी। iterator_facade के ऑपरेटर-> और ऑपरेटर [] के लिए वापसी प्रकार स्पष्ट रूप से निर्दिष्ट नहीं हैं। इसके बजाय, उन प्रकारों को आवश्यकताओं के एक सेट के अनुसार वर्णित किया जाता है, जिसे iterator_facade कार्यान्वयन से संतुष्ट होना चाहिए।

निष्कर्ष : जब तक प्रॉक्सी इटरेटर को इसकी अंतर्निहित value_type के माध्यम से .m या - & gt; m के सदस्यों तक पहुंचने की आवश्यकता नहीं होती है, तब तक किसी को सूचक के अंदर iterator_traits टाइप करें, और यहां तक ​​कि अगर कोई भी प्रॉक्सी वायरर्स का उपयोग करता है, तो boost :: iterator_facade सही चीज़ करेगा।

Comments

Popular posts from this blog

c - Mpirun hangs when mpi send and recieve is put in a loop -

python - Apply coupon to a customer's subscription based on non-stripe related actions on the site -

java - Unable to get JDBC connection in Spring application to MySQL -