मैं खुद को सी ++ सिखाने की कोशिश कर रहा हूं, और पारंपरिक "नई भाषा" अभ्यासों में से एक जो मैंने हमेशा उपयोग किया है, कुछ बाइनरी पेड़ या एक लिंक्ड सूची की तरह कुछ डेटा संरचना को लागू करना है। जावा में, यह अपेक्षाकृत सरल था: मैं कुछ वर्ग नोड को परिभाषित कर सकता था जो एक आवृत्ति परिवर्तनीय Object data
बनाए रखता था, ताकि कोई सूची या पेड़ के प्रत्येक नोड में किसी भी प्रकार की वस्तु को स्टोर कर सके। (बाद में मैंने जेनेरिकों का उपयोग करके इसे संशोधित करने पर काम किया; यह सवाल इस बारे में नहीं है।)सी ++ में किसी ऑब्जेक्ट प्रकार के संदर्भ को बनाए रखें?
मुझे "किसी भी प्रकार की ऑब्जेक्ट" को संग्रहीत करने का एक समान, बेवकूफ सी ++ तरीका नहीं मिल रहा है। सी में मैं void
पॉइंटर का उपयोग करूंगा; वही बात सी ++ के लिए काम करती है, जाहिर है, लेकिन जब मैं std::string
का उदाहरण बनाता हूं और इसे सूची/पेड़ में संग्रहीत करने की कोशिश करता हूं (std::string&
से void*
पर अमान्य कास्ट के बारे में कुछ) तो मैं समस्याओं में भाग लेता हूं। क्या ऐसा कोई रास्ता है? क्या सी ++ जावा के ऑब्जेक्ट (या ऑब्जेक्टिव-सी के एनएसओब्जेक्ट) के बराबर है?
बोनस प्रश्न: यदि ऐसा नहीं होता है, और मुझे शून्य पॉइंटर्स का उपयोग करना जारी रखना है, तो std::string
को void*
में स्टोर करने का "सही" तरीका क्या है? मैं static_cast<char*>(str.c_str())
पर ठोकर खाई, लेकिन ऐसा लगता है कि मैं जो करने की कोशिश कर रहा हूं उसके लिए वर्बोज़ लगता है। क्या कोई बेहतर तरीका है?
यह सवाल क्यों कम किया गया था? –
मुझे भी जानना रूचि है - मुझे डुप्ली या कुछ भी नहीं मिला ... – Tim
यह पुराने मजाक की तरह है। रोगी: जब मैं ऐसा करता हूं तो दर्द होता है। डॉक्टर: ऐसा मत करो। सी ++ में, "कुछ भी" का संग्रह न करें। –