क्या बेस प्रकार से व्युत्पन्न प्रकार से एसटीएल कंटेनर डालना ठीक है? उदाहरण के लिए, मेरे पास दो वैक्टर हैं। पहला बेस बेस क्लास के प्रकार में है, दूसरा एक व्युत्पन्न वर्ग के प्रकार में है।क्या बेस प्रकार के साथ एसटीएल कंटेनर को व्युत्पन्न प्रकार में डालना ठीक है?
class Base
{
// Code
};
class Derive : public Base
{
// Code
};
प्रयोग
vector<Base*>* vec_base = new vector<Base*>;
// Add some Derive type data to vec_base
vector<Derive*>* vec_derive = (vector<Derive*>*)(vec_base);
// Using elements as Derive pointers. Works fine.
यह ठीक है? (यह ठीक काम करता है, लेकिन मैं इसके बारे में कुछ टिप्पणियां प्राप्त करना चाहता था)। आपका बहुत बहुत धन्यवाद।
संपादित करें: उत्तरों के अनुसार अद्यतन।
कहें, अगर मैं उस वेक्टर का ध्यान से उपयोग करता हूं, और एकाधिक विरासत के साथ उपयोग नहीं करता और व्युत्पन्न प्रकार के अलावा अन्य वस्तुओं को सम्मिलित नहीं करता, तो क्या यह ठीक है? (मुझे लगता है, यह नहीं है)
और उत्तर के लिए आपको बहुत बहुत धन्यवाद।
पुन: अपडेट करें - std :: transform जैसे कुछ का उपयोग किए बिना आप कुछ भी नहीं कर सकते हैं, यह reinterpret_cast के अलावा किसी भी कलाकार का उपयोग करेगा, जो आप – Flexo
@awoodland के लिए नहीं देख रहे हैं, फिर भी reinterpret_cast खराब है बहुलक प्रकार? मेरा मतलब है, भले ही मैं 100% सुनिश्चित करता हूं कि वेक्टर reinterpret_cast के "मुझे सही प्रकार पता है" इस मामले के लिए अनिर्धारित है? – Morpheus
reinterpret_cast std :: vector पर निश्चित रूप से खराब है, समस्या यह है कि std :: vector और std :: vector के लिए मेमोरी लेआउट यह मानने के लिए कोई (पोर्टेबल, मानकीकृत) कारण नहीं है कि यह काम करेगा। –
Flexo