से विरासत मान लीजिए मैं निम्नलिखित वर्ग परिभाषाओंसशर्त शुद्ध आधार वर्ग
हैstruct base {
virtual int f() = 0;
};
struct A: public base {
int f() final { return 1; }
};
struct B: public base {
int f() final { return 2; }
};
यह टेम्पलेट्स है कि एक bool
पैरामीटर निर्दिष्ट करता है कि base
या नहीं से विरासत के लिए कि क्या ले में A
और B
चालू करने के लिए संभव है? मेरे पास ऐसे मामले हैं जो एक सामान्य इंटरफ़ेस प्रदान करने वाले बेस क्लास की आवश्यकता नहीं करते हैं या नहीं।
मान लें कि A
और B
में बहुत से सदस्य कार्य हैं, इसलिए डुप्लीकेटिंग कार्यान्वयन कठिन होगा। लेकिन sizeof(A)
और sizeof(B)
छोटे हैं।
क्या आपको दो संस्करणों की आवश्यकता है? मान लीजिए कि 'बेस' में केवल अमूर्त कार्य होते हैं, वहां कोई रनटाइम लागत नहीं होनी चाहिए। आपके उदाहरण में आपके ऑप्टिमाइज़र को यह देखना चाहिए कि कोई भी 'ए' वहां से 'f() 'का उपयोग करने जा रहा है क्योंकि यह' अंतिम 'है। – Guvante
@ गुवाँटे: यह प्रकार पॉलीमोर्फिक बनाता है, जो इसे एक vtable देता है। रनटाइम लागत नहीं, लेकिन फिर भी एक लागत। – ildjarn
@ गुवाएं विरासत प्रकार का आकार एक सूचक के आकार से बड़ा होता है, जो vtable को इंगित करता है। – SU3