में विभिन्न वर्गों की वस्तुओं को पकड़ सकता है, मैं एक सरणी कैसे बना सकता हूं जो सी ++ में विभिन्न वर्गों की वस्तुओं को पकड़ सकता है?एक सरणी बनाना जो सी ++
उत्तर
यदि आप अपना खुद का बनाना चाहते हैं, तो टेम्पलेट्स और ऑपरेटर ओवरलोडिंग का उपयोग करके पॉइंटर/सरणी तक पहुंच को लपेटें। नीचे एक छोटा सा उदाहरण है:
#include <iostream>
using namespace std;
template <class T>
class Array
{
private:
T* things;
public:
Array(T* a, int n) {
things = new T[n];
for (int i=0; i<n; i++) {
things[i] = a[i];
}
}
~Array() {
delete[] things;
}
T& operator [](const int idx) const {
return things[idx];
}
};
int main()
{
int a[] = {1,2,3};
double b[] = {1.2, 3.5, 6.0};
Array<int> intArray(a, 3);
Array<double> doubleArray(b, 3);
cout << "intArray[1]: " << intArray[1] << endl;
}
आप boost::any
या boost::variant
(दो: [1] के बीच तुलना) का उपयोग कर सकते हैं।
वैकल्पिक रूप से, "विभिन्न वर्गों की वस्तुओं" एक आम पूर्वज (जैसे कि, Base
), तो आप इस्तेमाल कर सकते हैं एक std::vector<Base*>
(या std::vector<std::tr1::shared_ptr<Base> >
), और Derived*
लिए परिणाम डाली और जब आवश्यकता होती है।
भी बढ़ावा है: संस्करण। लेकिन जब तक आप वास्तव में असंबंधित वर्गों की वस्तुओं को पकड़ना नहीं चाहते हैं, तब तक मैं इस दृष्टिकोण की अनुशंसा नहीं करता। अन्यथा विकल्प 2 शायद बेहतर है। –
यदि संग्रह ज्ञात है तो मैं 'किसी भी' पर 'संस्करण' की अनुशंसा करता हूं। स्टेटिक चेक एक बड़ी अपील है। यह भी तेज़ है, जो एक अच्छा बोनस है। –
आधार वर्ग को परिभाषित करें और अपनी सभी कक्षाओं को इस से प्राप्त करें।
तो फिर तुम के प्रकार (आधार *) एक सूची बना सकते हैं और यह बेस प्रकार की किसी भी वस्तु या व्युत्पन्न प्रकार
इसे बेस क्लास (या कम से कम किसी प्रकार का संदर्भ) के पॉइंटर्स होने की आवश्यकता है, अन्यथा आप ऑब्जेक्ट को बेस पर स्लाइस करेंगे। – Skurmedel
@ स्कुरमेडेल - जाहिर है कि इसे एक सूचक होने की आवश्यकता है। जो इसे मूल्य के रूप में डालने के बारे में सोचेंगे? ... वैसे भी मैं अपना जवाब संपादित करूंगा – SysAdmin
मैं 2 साल पहले :) – Skurmedel
boost::fusion पर एक नज़र जो एक STL-प्रतिकृति है है हो सकता है, लेकिन क्षमता के साथ स्टोर करने के लिए कंटेनर में विभिन्न डेटा प्रकार
- 1. सी # सरणियों की एक सरणी बनाना
- 2. एक प्रोग्राम बनाना जो विंडोज
- 3. अज्ञात प्रकार की सरणी बनाना। सी #
- 4. जो एक और सरणी
- 5. एक अभिव्यक्ति वृक्ष बनाना जो एक विधि
- 6. उद्देश्य-सी में ऑब्जेक्ट्स की एक सरणी बनाना।
- 7. एक सादे सरणी से एक QList बनाना
- 8. सी ++, एक चार सरणी
- 9. एक बहुत बड़ा जावा सरणी बनाना
- 10. पायथन 3 बाइट्स की एक सरणी बनाना
- 11. एक कैपिस्ट्रानो कार्य बनाना जो भूमिका
- 12. बाइट सरणी से एक फ़ाइल बनाना
- 13. जावा - विधियों की एक सरणी बनाना
- 14. बनाना सरणी नक्शा
- 15. एक नया सी ++ सबवेक्टर बनाना?
- 16. एक सी ++ कक्षा आरेख बनाना
- 17. एक सी सरणी
- 18. सी एक बड़ा सरणी
- 19. एक स्ट्रिंग सरणी सी #
- 20. संपत्ति बनाना जो इंडेक्सऑटऑफेंजेंज एक्सेप्शन
- 21. विंडोज़ बनाना केवल एक प्रोग्राम है जो उपयोगकर्ता को
- 22. सी # कॉलिंग सी फ़ंक्शन जो फिक्स्ड साइज चार सरणी
- 23. एक पैरामीटर के लिए सर्विसस्टैक मार्ग परिभाषा जो एक सरणी
- 24. सी # linq - सरणी से तत्व प्राप्त करें जो एक अलग सरणी में मौजूद नहीं है
- 25. सी # - दो Int32s से एक Int64 बनाना
- 26. सी # में एक सरणी सूचकांक
- 27. स्प्लिट सी में एक सरणी ++
- 28. जनरेटिंग int सरणी जो सदस्य चर
- 29. सी में एक cout समारोह बनाना?
- 30. सी # नियंत्रणों की एक सरणी बनाएं
हालांकि इसमें केवल एक प्रकार प्रति उदाहरण है। मुझे यकीन नहीं है कि एक कंटेनर को कैसे कार्यान्वित किया जाए जो एक उदाहरण में विभिन्न डेटा प्रकारों को स्टोर कर सके। शायद किसी भी तरह फंक्शन टेम्पलेट्स का उपयोग करके? – Nils