मैं क्या विभिन्न compilers जीसीसी के पास का उपयोग कार्यान्वयन (जो रैखिक नहीं है) पता नहीं है। हालांकि, यह जोर देना महत्वपूर्ण है कि पेपर आवश्यक रूप से ऐसी विधि का प्रस्ताव नहीं करता है जो सभी (या यहां तक कि आम) उपयोग के लिए मौजूदा कार्यान्वयन से हमेशा तेज़ होता है। यह एक सामान्य समाधान का प्रस्ताव करता है जो विरासत पदानुक्रम बढ़ने के रूप में असंवेदनशील रूप से बेहतर है।
हालांकि, यह शायद ही कभी बड़े विरासत पदानुक्रम के लिए एक अच्छा डिजाइन है, के रूप में वे अखंड और बदलने के लिए अनम्य बनने के लिए आवेदन के लिए मजबूर करते हैं। लचीले डिज़ाइन वाले कार्यक्रमों में केवल 2 स्तरों, एक सार आधार और ओपन/क्लोज़ेड सिद्धांत का समर्थन करने के लिए रनटाइम पॉलीमोर्फिक भूमिकाओं के कार्यान्वयन के साथ पदानुक्रम होते हैं। इन मामलों में, विरासत ग्राफ चलना एक पॉइंटर अव्यवस्था और तुलना के रूप में सरल हो सकता है, जो कि गिब्स और स्ट्राउस्ट्रप द्वारा प्रस्तुत इंडेक्स-सम-डाउन-डेरेंफर-फिर-तुलना की तुलना में तेज़ हो सकता है।
इसके अलावा, यह तनाव है कि यह एक कार्यक्रम dynamic_cast का उपयोग करता है जब तक अपने काम से काम नियमों की आवश्यकता होती है लिखने के लिए कभी नहीं आवश्यक है महत्वपूर्ण है। गतिशील_कास्ट का उपयोग हमेशा एक संकेत है कि बहुरूपता का सही ढंग से उपयोग नहीं किया जा रहा है और पुन: उपयोग किया जा रहा है। यदि आपको पदानुक्रम कास्टिंग करने के आधार पर व्यवहार की आवश्यकता है, तो वर्चुअल विधि जोड़ने से साफ समाधान मिलता है। यदि आपके पास कोड अनुभाग है जो कि प्रकारों पर गतिशील_कास्ट-चेक करता है, तो कोड का वह अनुभाग कभी भी "बंद" नहीं होगा (ओपन/क्लोज़ड सिद्धांत के अर्थ में), और सिस्टम में जोड़े गए प्रत्येक नए प्रकार के लिए अपडेट होने की आवश्यकता होगी। दूसरी ओर, एक वर्चुअल प्रेषण, केवल नए प्रकारों पर जोड़ा जाता है, जिससे आप विस्तार के लिए खुले रह सकते हैं और फिर भी बेस प्रकार पर चल रहे व्यवहार को बंद कर सकते हैं।
तो यह वास्तव में एक नहीं बल्कि शैक्षणिक सुझाव (एक hash_map एल्गोरिदम रूप से करने के लिए एक नक्शा बदल रहा है के बराबर) असली दुनिया प्रभाव नहीं होना चाहिए कि अगर अच्छे डिजाइन पीछा किया जाता है है। यदि व्यवसाय नियम अच्छे डिजाइन को मना करते हैं (कुछ दुकानों में कोड बाधाएं या कोड स्वामित्व के मुद्दे हो सकते हैं, जहां आप मौजूदा आर्किटेक्चर को जिस तरह से बदलना चाहते हैं, उन्हें बदल नहीं सकते हैं, न ही वे एडाप्टर को सामान्य रूप से तृतीय पक्ष पुस्तकालयों के लिए उपयोग किए जाने की अनुमति देते हैं), फिर यह तय करना सबसे अच्छा नहीं है कि किस एल्गोरिदम को लागू किया गया है, इस आधार पर संकलक का उपयोग करना है। हमेशा की तरह, यदि प्रदर्शन महत्वपूर्ण है और आपको गतिशील_कास्ट जैसी सुविधा का उपयोग करना है, तो अपना कोड प्रोफाइल करें। यह संभव है (और कई मामलों में संभावना है) कि पेड़-चलने के कार्यान्वयन अभ्यास में तेजी से है।
भी the standards committee's review of implementations, including dynamic_cast और a well-known look at c++ in embedded environments and good use (which mentions Gibbs and Stroustrup in passing) देखें।
मुझे नहीं पता कि कोई कंपाइलर इसका उपयोग करता है, लेकिन मैंने इसे पुस्तकालय आधारित आरटीटीआई समाधानों में उपयोग किया है। –
चूंकि "टाइप आईडी" का "आवंटन" लिंक समय के दौरान किया जाता है (पेपर देखें), लाइब्रेरी इसे कैसे प्राप्त कर सकती है? आपके पास कोई उदाहरण है? –
यह बिल्कुल वही नहीं है; आईडी को किसी अन्य विधि के माध्यम से असाइन किया गया है, लेकिन वे अभी भी एक वैध कलाकार निर्धारित करने के लिए मॉड्यूल का उपयोग करते हैं। –