ऐसा प्रतीत होता है कि इटरेटर एडाप्टर reverse_iterator
दोगुनी इसके अधिकांश नेस्टेड प्रकारों को परिभाषित करता है। विशेष रूप से, यह std::iterator
से सार्वजनिक रूप से विरासत में आता है जो iterator_category
, value_type
, difference_type
, pointer
और reference
का खुलासा करता है। iterator_category
और value_type
के अलावा, ये कक्षा परिभाषा में सभी स्पष्ट रूप से typedef
'ed हैं।रिवर्स_इटरेटर अपने घोंसले प्रकार को दोगुना क्यों परिभाषित करता है?
24.5.1.1 कक्षा टेम्पलेट reverse_iterator [reverse.iterator]
namespace std {
template <class Iterator>
class reverse_iterator : public
iterator<typename iterator_traits<Iterator>::iterator_category,
typename iterator_traits<Iterator>::value_type,
typename iterator_traits<Iterator>::difference_type,
typename iterator_traits<Iterator>::pointer,
typename iterator_traits<Iterator>::reference> {
public:
typedef Iterator iterator_type;
typedef typename iterator_traits<Iterator>::difference_type difference_type;
typedef typename iterator_traits<Iterator>::reference reference;
typedef typename iterator_traits<Iterator>::pointer pointer;
// ... rest of the class
};
प्रश्न: क्यों दोहराए परिभाषा? क्या यह सिर्फ प्रदर्शनी के प्रयोजनों के लिए है, या इसके लिए और भी कुछ है? और iterator_category
और value_type
को फिर से परिभाषित क्यों न करें?
यह 'value_type' या तो फिर से परिभाषित नहीं है। वैसे भी, यह प्रश्न जल्द ही जल्द ही बन जाएगा, [एलडब्ल्यूजी 2438] (http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2438) के लिए धन्यवाद। –
@ टी.सी. डीआर खोदने के लिए धन्यवाद। मैंने क्यू को अपडेट किया। अगर आप इसे उत्तर देते हैं, तो मैं स्वीकार करूंगा। – TemplateRex
शायद इसे आश्रित नाम लुकअप के साथ करना है? 'Iterator' से विरासत में नाम सभी मामलों में दिखाई नहीं दे रहे हैं, क्योंकि यह एक निर्भर आधार वर्ग है। – dyp