पोर्टेबल सी ++ में जो भी आप चाहते हैं उसे करने के लिए संभव नहीं है।
यह एक आंशिक जवाब अगर आप अपने आप को किसी दिए गए मंच के लिए प्रतिबंधित प्राप्त करने के लिए संभव हो सकता है। उदाहरण के लिए उन प्लेटफार्मों कि Itanium ABI का पालन इस समारोह के एक कार्यान्वयन होगा:
extern "C"
void* __dynamic_cast(const void *sub,
const abi::__class_type_info *src,
const abi::__class_type_info *dst,
std::ptrdiff_t src2dst_offset);
इस ABI में, abi::__class_type_info
एक प्रकार std::type_info
से ली गई है, और कार्यक्रम में सभीstd::type_info
रों एक गतिशील प्रकार व्युत्पन्न है है std::type_info
से (abi::__class_type_info
केवल एक उदाहरण होने के नाते)।
इस एबीआई का उपयोग करना एक ऐसा उपकरण बनाना संभव है जो किसी भी प्रकार (रन टाइम पर) के उत्तराधिकारी पदानुक्रम को नेविगेट करेगा, इसके std::type_info
दिए गए हैं। और ऐसा करने में आप यह निर्धारित कर सकते हैं कि दो std::type_info
एस दो प्रकार का प्रतिनिधित्व करते हैं जो dynamic_cast
या static_cast
एक दूसरे के लिए भी हो सकते हैं।
ध्यान दें कि ऐसा समाधान किसी कनवर्टिंग कन्स्ट्रक्टर या रूपांतरण ऑपरेटर का उपयोग करके प्रकारों में परिवर्तित नहीं होगा। और भले ही वह प्रतिबंध स्वीकार्य है, मैं इस मार्ग की अनुशंसा नहीं करता हूं। यह एक आसान परियोजना नहीं है, और बहुत त्रुटि होगी प्रवण। लेकिन शायद यह है कि आपका सी ++ कार्यान्वयन dynamic_cast
लागू करता है, इसलिए यह स्पष्ट रूप से असंभव नहीं है।
स्रोत
2012-05-08 23:50:53
मुझे नहीं लगता कि यह संभव है। लेकिन असली सवाल यह है कि, आप इस तरह के एक समारोह के साथ क्या करेंगे? – Nawaz
इसके अलावा, आपके पास केवल 'type_info' क्यों होगा? – mfontanini
"यदि आप वास्तव में ए और बी प्रकार जानते हैं तो यह अच्छी तरह से काम करता है"।ठीक है, लेकिन आप कैसे प्रकारों को नहीं जानते? – jrok