.net - Implementing IEnumerable<T> in C++/CLI -
मुझे सी ++ / सीएलआई में कस्टम संग्रह वर्ग में IEnumerable & lt; T & gt;
को लागू करने में समस्याएं आ रही हैं । यहां कोड का प्रासंगिक हिस्सा है:
नामस्थान सिस्टम :: संग्रह :: जेनेरिक का उपयोग कर; रेफ़ क्लास MyCollection: IEnumerable & lt; MyClass ^ & gt; {सार्वजनिक: MyCollection () {} आभासी IEnumerator & lt; MyClass ^ & gt; ^ GetEnumerator () {वापसी nullptr; }};
संकलित होने पर, निम्न त्रुटियों में यह परिणाम होता है:
त्रुटि C2392: 'सिस्टम :: संग्रह :: जेनेरिक :: IEnumerator ^ MyCollection :: GetEnumerator (शून्य) ': संप्रदाय के रिटर्न प्रकार समर्थित प्रकारों में समर्थित नहीं हैं, अन्यथा' सिस्टम :: संग्रह :: IEnumerator ^ सिस्टम :: संग्रह :: IEnumerable :: GetEnumerator (शून्य) 'अधिसूचित त्रुटि C3766 होगा:' MyCollection 'प्रदान करना आवश्यक है इंटरफेस विधि के लिए एक कार्यान्वयन 'सिस्टम :: संग्रह :: IEnumerator ^ सिस्टम :: संग्रह :: IEnumerable :: GetEnumerator (शून्य)'
यह समझ में आता है, क्योंकि IEnumerable & lt; टी & gt;
से प्राप्त IEnumerable
। हालांकि, मुझे यकीन नहीं है कि इस संकलन त्रुटि को ठीक कैसे करें। यदि यह सी # था, तो मैं असम्बद्ध रूप से IEnumerable
को कार्यान्वित करूंगा, लेकिन मुझे यकीन नहीं है कि सी ++ / सीएलआई में ऐसा कैसे करना है (यदि यह संभव है तो):
कक्षाएं MyCollection: IEnumerable & lt; MyClass & gt; {सार्वजनिक MyCollection () {} सार्वजनिक IEnumerator & lt; MyClass & gt; GetEnumerator () {वापसी नल; } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator () {वापसी GetEnumerator (); }}
अगर मैं IEnumerable :: GetEnumerator ()
के कार्यान्वयन को जोड़ता हूं, तो संकलक दो तरीकों के बारे में शिकायत करता है जो केवल वापसी प्रकार से भिन्न होती हैं (जो भी बनाता है
पोस्ट टेक्स्ट "itemprop =" text ">
आपको एक स्पष्ट कार्यान्वयन प्रदान करना होगा और गैर-सामान्य नामस्थान शामिल होना चाहिए:
नामस्थान सिस्टम का उपयोग करना: संग्रह; .... आभासी IEnumerator ^ EnumerableGetEnumerator () = IEnumerable :: GetEnumerator {वापसी GetNumerator & lt; MyClass ^ & gt; (); } अपडेट: जैसा कि टिप्पणियों में उल्लिखित है, नाम के संघर्ष से बचने के लिए GetEnumerator का स्पष्ट संस्करण अलग-अलग नामित होना चाहिए, इस प्रकार मैंने इसे नामांकित गेट एंनामेटर नाम दिया है। / P> इसी प्रकार, सी # में आपको इसे ऐसा करना होगा:
सिस्टम का उपयोग कर। Collections.Generic; सार्वजनिक श्रेणी के MyCollection: IEnumerable & lt; MyClass & gt; {सार्वजनिक MyCollection () {} सार्वजनिक IEnumerator & lt; MyClass & gt; GetEnumerator () {वापसी नल; } IEnumerator IEnumerable.GetEnumerator () {वापसी GetEnumerator & lt; MyClass & gt; (); }}