जेनेरिक इटरेटर

मैं कंटेनरों के एक सेट तक पहुंचने का एक सामान्य तरीका खोजने की कोशिश कर रहा हूं। मेरे पास एक और कस्टम सूची के अलावा एक मानक वेक्टर और सूची है।

कस्टम सूची एक पुनरावर्तक परिभाषित करता है;

class Iterator: public std::iterator {
   //...
}

Iterator begin() {
    return (Iterator(root));
}

Iterator end() {
    return (Iterator(NULL));
}

उचित ऑपरेटरों के अधिभार के साथ।

आदर्श रूप में, मैं यह करना चाहता हूं;

class Foo {
public:
    Foo() {
        std::list x;
        std::vector y;
        custom_list z;

        iter = x.begin();//OR
        iter = y.begin();//OR
        iter = z.begin();

       //...
    };
private:
    std::iterator iter;
};

लेकिन जाहिर है ये विभिन्न प्रकार के सभी इटरेटर हैं। मैं मान सकता हूं कि सभी कंटेनर एक ही प्रकार के हैं।

क्या इस समस्या को हल करने का कोई शानदार तरीका है?

0
ro fr bn

3 उत्तर

देर आए दुरुस्त आए...

सी-वीयू का नवीनतम अंक बदल गया और अनुमान लगाया कि इसमें क्या था: यह सही है , इटरेटर जो आप चाहते थे बिल्कुल करते हैं।

दुर्भाग्य से आपको पत्रिका देखने के लिए ACCU का सदस्य बनने की आवश्यकता है (लेख 2000 से ओवरलोड लेख का संदर्भ देता है जो डेविड के लिए लिंक)। लेकिन एक साल की कीमत के लिए आपको पढ़ने, सम्मेलनों और उपयोगकर्ता समूहों को पढ़ने के लिए एक अच्छी पत्रिका मिलती है। जब आप सदस्य बन जाते हैं तो आप पीडीएफ के बैक मुद्दों को देख सकते हैं ताकि आप किसके लिए प्रतीक्षा कर रहे हैं ?

0
जोड़ा
यदि आप उल्लेख करते हैं कि लेख वॉल्यूम 20 अंक 3 जून 08 में सी ++ में कस्टम इटरेटर नामक पाया गया है तो यह उपयोगी होगा। अच्छा उपयोगकर्ता तस्वीर बीटीडब्ल्यू।
जोड़ा लेखक danio, स्रोत

यहां कुछ लेख दिए गए हैं जिन्हें आप रुचि के बारे में पा सकते हैं

एसटीएल Iterators को एक बेस क्लास देना

सी ++ इटरेटर के लिए मिटाएं

any_iterator क्लास रेफरेंस

0
जोड़ा
थॉमस बेकर (उपरोक्त दूसरे लिंक के लेखक) में एक लंबा लेख है जो उत्कृष्ट है: artima.com/ cppsource/type_erasure.html
जोड़ा लेखक Adrian, स्रोत
@ एड्रियन - वह लेख शानदार था: डी साझा करने के लिए धन्यवाद!
जोड़ा लेखक nevelis, स्रोत

सावधान रहने का एक मामला जो आप पूछते हैं। आपके द्वारा देखे गए किसी भी_इटरेटर कक्षाएं इटरेटर प्रकारों के एक असंबद्ध सेट पर काम करती हैं। आपके पास केवल तीन हैं, जिन्हें आप आगे जानते हैं। निश्चित रूप से, आपको भविष्य में चौथा प्रकार जोड़ना पड़ सकता है, लेकिन अगर ऐसा होता है तो क्या ओ (1) कोड की अतिरिक्त रेखाएं लेती हैं?

संभावित निहित प्रकारों के एक बंद सेट का बड़ा लाभ यह है कि आपके पास आकार() पर ऊपरी सीमा है, जिसका अर्थ है कि आप ढेर से बच सकते हैं और यह संकेत लाता है। असल में, उन्हें सभी को बढ़ावा दें :: संस्करण और कॉल apply_visitor पर कॉल करें।

0
जोड़ा