इटरेटर इस तरह के समान हैं और एक दिलचस्प अध्ययन करते हैं।
कॉन्स इटरेटर अक्सर 'गैर कॉन्स' इटरेटर्स के लिए आधार होते हैं, और आपको अक्सर const_cast<>()
या सी शैली का उपयोग बच्चे के एक्सेसर्स के साथ बेस क्लास से कॉन्स्ट को त्यागने के लिए किया जाता है।
संपादित करें: टिप्पणी
मैं एक ज़िप इटरेटर जहां स्थिरांक एक गैर स्थिरांक
से विरासत है था यह आम तौर पर गलत inheritence संरचना (हो सकता है अगर आपके कह कि मैं क्या लगता है कि आप हैं), कारण यह है कि बच्चों को माता-पिता से कम प्रतिबंधित नहीं होना चाहिए।
का कहना है कि आपके पास अपने ज़िप इटरेटर लेने वाले कुछ एल्गोरिदम थे, क्या यह एक कॉन्स इटरेटर को गैर-कॉन्सेट में पास करने के लिए उचित होगा?
यदि आपके पास एक कॉन्स कंटेनर था, तो केवल इसे एक कॉन्स इटरेटर के लिए पूछ सकता था, लेकिन फिर कॉन्स्ट इटरेटर एक पुनरावर्तक से लिया गया है ताकि आप माता-पिता पर नॉन कॉन्स्ट एक्सेस के लिए केवल सुविधाओं का उपयोग कर सकें।
यहाँ पारंपरिक एसटीएल मॉडल
class ConstIterator:
public std::_Bidit< myType, int, const myType *, const mType & >
{
reference operator*() const { return m_p; }
}
class Iterator : public ConstIterator
{
typedef ConstIterator _Mybase;
// overide the types provided by ConstIterator
typedef myType * pointer;
typedef myType & reference;
reference operator*() const
{
return ((reference)**(_Mybase *)this);
}
}
typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
typedef std::reverse_iterator<Iterator> ReverseIterator;
स्रोत
2010-10-28 21:28:34
आप पहले व्यक्ति नहीं हैं: http://stackoverflow.com/questions/856542/elegant-solution-to-duplicate-const-and-non-const-getters –
धन्यवाद जब तक यह नहीं आया मेरी खोज – Steve