2011-11-14 19 views
6

मेरे पास पॉलीमोर्फिक ऑब्जेक्ट में Base* base_ptr एक पॉइंटर है। क्या गतिशील प्रकार के गतिशील वस्तु का आकार खोजना संभव है?एक पॉलिमॉर्फिक ऑब्जेक्ट का आकार पता करें

AFAIK, sizeof(*base_ptr)base_ptr के स्थिर प्रकार के आकार को yilds। मुझे संदेह है कि यह संभव नहीं है, लेकिन शायद मैं कुछ दिख रहा हूं।

नोट: मुझे पता है कि मैं अपने प्रकार के पदानुक्रम में वर्चुअल फ़ंक्शन जोड़ सकता हूं जो आकार देता है, लेकिन यह मेरे मामले में एक वांछनीय समाधान नहीं है।

संपादित करें: sizeof(base_ptr) ->sizeof(*base_ptr)

+0

'sizeof (base_ptr)' आप के आकार देता है पॉइंटर, किसी भी वर्ग के नहीं। –

+0

ऐसा लगता है कि g ++ - विशिष्ट यह जानकारी प्रदान नहीं करता है। – aschepler

उत्तर

11

नहीं, आप ऐसा नहीं कर सकते C++ - कम से कम एक पोर्टेबल तरीके से। सबसे अच्छी शर्त getSize() सदस्य वर्ग प्रत्येक वर्ग में लागू की जाएगी।

5

हां। के रूप में मैं यहाँ वर्णित,

class Base 
{ 
    virtual int size() { return sizeof(Base); } 
}; 
class Derived : public Base 
{ 
    virtual int size() { return sizeof(Derived); } 
}; 

//...... 
Base* b = new Derived; 
int size = b->size(); //will call Derived::size() and return correct size 
2

आप CRTP idiom उपयोग कर सकते हैं यदि संभव हो तो:: आप आधार वर्ग जो आकार रिटर्न में एक आभासी समारोह को लागू कर सकते https://stackoverflow.com/a/14730166/908336

संबंधित मुद्दे