2010-01-18 16 views
6

जीसीसी का उपयोग करते हुए, जब मैं टाइपिड का उपयोग कर किसी ऑब्जेक्ट/वेरिएबल के प्रकार के लिए पूछता हूं, तो मुझे टाइप_इनोफ़ :: नाम विधि से एक अलग परिणाम मिलता है जो मैं विंडोज पर प्राप्त करने की अपेक्षा करता हूं। मैं थोड़ा सा गूंज गया, और पाया कि आरटीटीआई नाम कार्यान्वयन-विशिष्ट हैं।क्या मैं जीसीसी के आरटीटीआई नामों को जोड़ सकता हूं?

समस्या यह है कि, मैं एक प्रकार का नाम प्राप्त करना चाहता हूं क्योंकि यह विंडोज पर वापस आ जाएगा। क्या इसे करने का कोई आसान तरीका है?

उत्तर

7

यदि आप यही पूछ रहे हैं, तो कोई कंपाइलर स्विच नहीं है जो type_info::name() द्वारा वापस दिए गए नाम के बारे में mccvc जैसा व्यवहार करेगा।

हालांकि, आपके कोड में आप जीसीसी विशिष्ट __cxa_demangle फ़ंक्शन पर भरोसा कर सकते हैं।

वास्तव में an answer on SO that addresses your problem है।

संदर्भ: libstdc++ manual, Chapter 40. Demangling

1

सी ++ फ़ंक्शन नामों में वास्तव में सभी रिटर्न और तर्क प्रकार की जानकारी के साथ-साथ कक्षा और विधि का नाम भी शामिल है। संकलित होने पर, वे एक मानक रूप में 'उलझन' होते हैं (प्रत्येक कंपाइलर के लिए मानक) जो एक असेंबलर प्रतीक के रूप में कार्य कर सकते हैं और सभी प्रकार की जानकारी शामिल कर सकते हैं।

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

फ़ंक्शन के परिणाम पर

c++filt myoutput.txt 

चलाने की कोशिश करें। यह वास्तविक प्रतीक नाम को मानव पठनीय रूप में वापस लाता है।

संबंधित मुद्दे