c++ - Determine inheritance at compile time -


मेरे पास कुछ कोड है जो इस तरह व्यवहार करता है:

  class base {}; वर्ग MyClass: सार्वजनिक बेस {}; MyClass * बेसटॉमी क्लास (बेस * पी) {MyClass * pRes = गतिशील_कास्ट & lt; MyClass * & gt; (पी); (प्रेस) पर जोर; वापसी पीआरएस; }  

क्या संकलन समय जांचने का एक तरीका है, इसलिए मैं इस फ़ंक्शन को कॉल कर सकता हूं जहां p MyClass का एक उदाहरण नहीं है? मैं एलेक्जेंडरस्कू के सुपरर्सबक्लास फ़ंक्शन पर एक नज़र आया था, लेकिन मुझे यकीन नहीं है कि यह काम कर सकता है।

धन्यवाद!

क्या संकलन समय जांचने का एक तरीका है, इसलिए मैं इस फ़ंक्शन को कॉल कर सकता हूं जहां p MyClass का एक उदाहरण नहीं है?

आम तौर पर, यदि आप इसे संकलन-समय पर जांचना चाहते हैं, तो आप तर्क के रूप में व्युत्पन्न वर्ग को ले लेंगे।

हालांकि, यदि आपके पास केवल एक चीज है तो बेस * या बेस & amp; है, फिर आप नहीं जान सकते चाहे वह MyClass ऑब्जेक्ट को संदर्भित करता है यह रन-टाइम पॉलिमॉर्फिज़्म की बहुत प्रकृति है कि यह रन-टाइम पर पाया जा सकता है यह चेक केवल तभी किया जा सकता है जहां MyClass ऑब्जेक्ट / संदर्भ / पॉइंटर को Base * / Base & amp; में परिवर्तित किया जाता है। यही कारण है कि गतिशील_कास्ट & lt; & gt; () का आविष्कार किया गया

आपका फ़ंक्शन मूल रूप से एक safe_cast है। अगर आप इसे सही वाक्य रचना में डालते हैं, तो ऐसा लगता है:

  टेम्पलेट & lt; टाइपनाम नामित, टाइपनाम बेस & gt; इनलाइन व्युत्पन्न * सुरक्षित_कास्ट (बेस * pb) {#if परिभाषित _NDEBUG वापसी static_cast & lt; Derived * & gt; (pb); # एल्स व्युत्पन्न * पीडी = गतिशील_कास्ट & लेफ्टिनेंट; व्युत्पन्न * & gt; (पीबी); जोर (पीडी); वापसी पीडी; #endif} टेम्पलेट & lt; टाइपनाम नामित, टाइपनाम बेस & gt; इनलाइन व्युत्पन्न & amp; सुरक्षित_कास्ट (आधार & amp; आरबी) {वापसी * ​​सुरक्षित_का & lt; व्युत्पन्न * & gt; (& amp; आरबी); }  

Comments