c++ - Iterator over references to class members, simple and preferably reusable -


कृपया निम्न बॉयलरप्लेट वर्ग के टुकड़े पर विचार करें:

  वर्ग ObjectA: public BaseObject {DerivedMemberA a , ए 2, ए 3; DerivedMemberB b; DerivedMemberC सी; // ...};   

DerivedMember * प्रकार एक सामान्य BaseMember वर्ग से प्राप्त होता है, और ObjectA (और समान < कोड> ऑब्जेक्टब , ऑब्जेक्टसी ...) को बेस ऑब्जेक्ट से लिया जाएगा।

अब मैं एक इटरेटर को लागू करना चाहता हूं जो सार्वजनिक बेस ऑब्जेक्ट इंटरफ़ेस में होगा, और जो व्युत्पन्न कक्षाओं के सदस्यों (जैसे BaseMember & amp; ) के संदर्भों को पुनरावृत्त करेगा।

दूसरे शब्दों में, उपयोग की तरह होगा: <पूर्व> बेसऑब्जेक्ट & amp; बी = कुछ ऑब्जेक्ट; के लिए (बेस ऑब्जेक्ट :: इटरेटर यह = बी.बीजीन (); यह! = बी.एड (); ++ यह) {बेसमेम्बर & amp; एम = * यह; // ...}

जो ObjectA पर कॉल किया गया था a , a2 पर पुनरावृत्त होगा .. ।

इसका समाधान करने का सबसे अच्छा तरीका क्या है? अधिमानतः इटरेटर के उप-क्लासिंग से बचने के साथ-साथ क्या कोई भी तैयार इटरेटर क्लास या टेम्प्लेट है जिसका पुन: उपयोग किया जा सकता है?

मैं एक वर्चुअल सदस्य फ़ंक्शन को कार्यान्वित करने की सोच रहा था जो कि एक वैरिएबल की संख्यात्मक 'इंडेक्स' और एक switch उपयुक्त संदर्भ वापस करने के लिए; तो उस सदस्य को इंडेक्स-रखने वाले इटरेटर से कॉल कर रहा है।

सी ++ में आत्मनिरीक्षण की कोई अवधारणा नहीं है, इसलिए मूल क्लास के लिए कोई भी तरीका नहीं है, यह जानने के लिए कि सदस्यों को व्युत्पन्न कक्षा में किस प्रकार परिभाषित किया गया है।

सबसे अच्छा आप प्रत्येक व्युत्पन्न वर्ग में एक आभासी फ़ंक्शन बना सकते हैं जो अपने स्वयं के सदस्यों के माध्यम से पुनरावृत्त होता है।

Comments