2011-06-15 14 views
8

क्या इसे आम तौर पर उत्पादन कोड में typeid का उपयोग करने के लिए बुरी आदत माना जाता है? इसके अलावा, मैंने देखा typeidtype_info देता है, जिसमें कुछ मेटाडाटा (जैसे प्रकार के नाम के साथ एक स्ट्रिंग) शामिल है; क्या इसे निष्क्रिय करने का कोई तरीका है?सी ++: उत्पादन कोड में टाइपिड का उपयोग

+3

शायद आप लाइब्रेरी कॉल से 'टाइपिड' संदर्भ वापस नहीं करना चाहते हैं। आप 'टाइप' को किसी अन्य चीज़ में बदलने के लिए फ़ंक्शन लिखने से बेहतर होंगे, जैसे 'int', जहां आप मैपिंग को नियंत्रित करते हैं। साथ ही, इस बात की कोई गारंटी नहीं है कि 'टाइपिड' कंपाइलर संस्करण से संस्करण तक ही रहेगा। इसका मतलब यह भी है कि आप डिस्क पर 'टाइपिड' को संग्रहित नहीं करना चाहते हैं, सिवाय इसके कि कैश फ़ाइल में जो रनों के बीच संरक्षित नहीं है। –

उत्तर

8

यह कहना मुश्किल है कि किसी विशेष भाषा सुविधा का उपयोग "खराब" या "अच्छा" है। यह वास्तव में इस बात पर निर्भर करता है कि आप इसका उपयोग कैसे करते हैं। typeid का उपयोग करने में स्वाभाविक रूप से गलत नहीं है यदि यह नौकरी के लिए सही उपकरण है, लेकिन यदि आप जो भी समस्या हल कर रहे हैं, उसके लिए बेहतर समाधान है, तो आपको उस बेहतर समाधान के पक्ष में typeid का उपयोग करने से बचना चाहिए।

अक्सर typeid का उपयोग करना एक अच्छा विचार नहीं है क्योंकि इसका उपयोग अक्सर विरासत और आभासी कार्यों का उपयोग करके टाला जा सकता है। यदि आप इस तरह से अपने सिस्टम को अपडेट कर सकते हैं, तो ऐसा करना एक अच्छा विचार हो सकता है।

चाहे आप typeidstd::type_info लौटने से बचें, इससे कोई प्रदर्शन समस्या नहीं होनी चाहिए। typeidconst std::type_info& का मूल्यांकन करता है, इसलिए यह इसमें मौजूद किसी भी स्ट्रिंग जानकारी की गहरी प्रतिलिपि नहीं करता है। अधिकांश कार्यान्वयन में वास्तविक std::type_info ऑब्जेक्ट की वर्चुअल फ़ंक्शन तालिका में संग्रहीत ऑब्जेक्ट होता है, इसलिए आंतरिक रूप से कोई प्रतिलिपि नहीं की जाती है।

11
  1. आप टाइपिड के साथ क्या कर रहे हैं इस पर निर्भर करता है। यदि आप इसका उपयोग कर रहे हैं जहां आपको पॉलिमॉर्फिज्म का उपयोग करना चाहिए, तो निश्चित रूप से यह बुरा है। हालांकि, ग्राहकों की मशीनों पर डीबग करने के लिए निशान या चीजों को डंप करना ठीक है।
  2. एकमात्र तरीका आपके कंपाइलर पर आरटीटीआई को अक्षम करना है। ऐसा करने का कोई मानक तरीका नहीं है। नोट यह dynamic_cast अक्षम भी करेगा।
संबंधित मुद्दे