2012-02-29 7 views
6

शायद एक अजीब सवाल है, लेकिन क्या कोई सॉफ़्टवेयर उपलब्ध है, जिसे सी ++ 11 कोड का एक गुच्छा दिया गया है, सभी प्रकार के ऑटो-टाइप किए गए चर प्राप्त करता है और कोड को फिर से लिखता है उन व्युत्पन्न प्रकारों के साथ? और प्रारंभकर्ता सूचियों के लिए भी?स्वचालित रूप से व्युत्पन्न प्रकारों में सी ++ 11 ऑटो कीवर्ड को फिर से लिखना

तर्क यह है कि हम अपने कोड (गैर सी ++ 11) का पिछड़ा संगत संस्करण प्रदान करना चाहते हैं, मुख्य रूप से ओएसएक्स के साथ पोर्टेबिलिटी के लिए। ऑटो-टाइपिंग और प्रारंभकर्ता सूचियां वे विशेषताएं हैं जिनकी हम अधिकतर उपयोग करते हैं क्योंकि वे कोड को और अधिक पठनीय बनाते हैं, लेकिन उन्हें हाथ से हटाकर जाना नहीं है। चूंकि यह वास्तव में ऑटो-टाइप किए गए चर के साथ कंपाइलर करता है, यह बहुत दूर नहीं लग रहा है?

+1

बचाव के लिए libclang? – sehe

+0

क्या आप @sehe विस्तृत कर सकते हैं? क्या उस फैशन में कुछ लोग झगड़ा करते हैं? एफवाईआई, क्लैंग 3.0 हमारे कोड को संकलित करने के लिए सी ++ 11 में पर्याप्त सुविधाओं का समर्थन नहीं करता है। –

+1

@ ब्रॉसडेकैट: वह सुझाव दे रहे थे कि आप अपने कोड को संकलित करने के लिए क्लैंग की कंपाइलर लाइब्रेरी का उपयोग करें, और उसके बाद इसे वापस लिखें, 'ऑटो' के सभी अपने समर्पित प्रकारों में परिवर्तित हो गए हैं। –

उत्तर

2

यदि आप बूस्ट का उपयोग कर सकते हैं, तो आप boost::typeof देख सकते हैं। यह ठीक से नहीं करेगा auto करता है, लेकिन, ज्यादातर मामलों में, इसे स्वचालित रूप से रेगेक्स-कैप्चर खोज के माध्यम से प्रतिस्थापित किया जा सकता है। BOOST_AUTO पर

3

देखो और/या BOOST_TYPEOF

आप स्थानापन्न सकता

auto x = foo(); 

साथ

यदि आप एक घोषणा का प्रबंधन करना चाहते हैं तो आपको BOOST_TYPEOF का सहारा लेना होगा। ध्यान दें कि दोनों मैक्रोज़ में कुछ वेरिएंट हैं जिन्हें आप

1

ग्रहण सीडीटी के लिए एक रिफैक्टरिंग प्लग-इन के लिए एक फीचर की तरह लगता है (मैंने वास्तव में कुछ समय पहले अपने छात्रों को ऐसा प्रस्तावित किया था)। अगली अवधि हो सकती है मैं ऐसा बनाने के लिए एक टीम पा सकता हूं। हालांकि, ग्रहण सीडीटी की जानकारी हमेशा सही सामान निर्धारित करने के लिए पर्याप्त नहीं हो सकती है।

कुछ initilizer सूचियों के लिए, उदाहरण के लिए, वेक्टर भरने वाले, boost :: असाइनमेंट एक प्रतिस्थापन हो सकता है। हमारा मॉकेटर मॉक-ऑब्जेक्ट इंफ्रास्ट्रक्चर सी ++ 11 में प्रारंभिक सूचियों की बजाय सी ++ 03 के लिए इनका उपयोग करता है।

आपको बूस्ट पुस्तकालयों से डरना नहीं चाहिए, कम से कम उन लोगों में से नहीं जो केवल हेडर के रूप में आते हैं। जिनके पास अलग-अलग मुक्ति वाले हिस्से हैं, वे सही तरीके से स्थापित करने में थोड़ी परेशानी हो सकती हैं (निर्माण की स्थिति हाल ही में सुधार हुई है)।

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