2009-09-10 31 views
25

मेरे पास विभिन्न वर्ग और फ़ंक्शन घोषणाओं के साथ सी ++ हेडर फ़ाइलों का एक गुच्छा है। अब तक, जब मैं घोषित कक्षाओं और कार्यों के सी ++ स्रोत फ़ाइल कार्यान्वयन लिख रहा हूं, तो मैं मैन्युअल रूप से रहा हूं:हेडर से सी ++ फ़ाइल स्वचालित रूप से उत्पन्न करें?

  1. शीर्षलेख फ़ाइल से संबंधित स्रोत फ़ाइल में घोषणाओं की प्रतिलिपि बनाना।
  2. "कक्षा वर्गनाम {" और मिलान "} को हटा रहा है;"
  3. सभी वर्ग कार्यों के नाम पर "classname ::" जोड़ना।
  4. "{}" के साथ फ़ंक्शन घोषणाओं के बाद अर्धविराम को प्रतिस्थापित करना।
  5. कीवर्ड "आभासी" और "स्थैतिक" को हटा रहा है।

केवल उस काम के बाद, जो वास्तव में कुछ भी नहीं करता है, क्या मैं वास्तव में कार्यों को लागू करने के बारे में जा सकता हूं। मैं सोच रहा हूं कि वहां कोई उपकरण है जो कहीं भी ".h" फ़ाइल से ".cpp" फ़ाइल उत्पन्न कर सकता है, जिसके परिणामस्वरूप ".cpp" में ".h" फ़ाइल में घोषित कार्यों के लिए खाली स्टब्स हैं (और जिसके लिए एक इनलाइन परिभाषा नहीं दी गई है)। एक यूनिक्स-अनुकूल कमांडलाइन उपकरण को प्राथमिकता दी जाएगी। धन्यवाद।

अद्यतन: एक क्रॉस-प्लेटफ़ॉर्म टूल आदर्श होगा। यदि नहीं, तो मैक ओएस एक्स 10.6 पर काम कर रहा हूं।

उत्तर

21

Lazy C++ ठीक उसी समस्या को हल करने के लिए डिज़ाइन किया गया प्रतीत होता है।

+0

आलसी सी ++ मैक ओएस एक्स पर स्थापित करने योग्य प्रतीत नहीं होता है ... जो मैं उपयोग कर रहा हूं। क्या कोई क्रॉस-प्लेटफार्म जनरेटर है जिसे आप जानते हैं कि आसानी से स्रोत से बनाया जा सकता है? –

+1

+1 बहुत दिलचस्प संसाधन। –

+1

@ माइकल: आप ओएसएक्स के लिए स्रोत और क्रॉस-कंपाइल पकड़ सकते हैं, उदाहरण के लिए देखें http: // stackoverflow का जवाब।कॉम/प्रश्न/1375201/आलसी-सी-चिकन-एंड-अंडे-समस्या – moonshadow

3

eclipse CDT में "कार्यान्वयन विधि" सुविधा है जो केवल (एक समय में एक विधि) करता है। एक "गेटर्स और सेटर्स जेनरेट करें" सुविधा भी है जो फ़ंक्शन निकायों में उचित कोड भी उत्पन्न करती है।

+0

धन्यवाद। मैं कमांडलाइन आमंत्रण की तलाश में हूं, हालांकि ... कुछ ऐसा जो मैं "प्रोजेक्ट" कमांड में अपने प्रोजेक्ट में सभी शीर्षलेख फ़ाइलों के लिए ".cpp" फ़ाइलों को पुन: उत्पन्न करने के लिए उपयोग कर सकता हूं। –

5

मैंने हाल ही में अपनी स्थिति में पाया और अपना खुद का टूल लिखने के लिए तैयार किया - impl_me। यह एक छोटी रूबी स्क्रिप्ट है जो SWIG को पार्सर बैकएंड के रूप में उपयोग करती है। यह stdout को लिखता है ताकि आप अपनी पसंदीदा प्राथमिकता के लिए tweak करने के लिए अपने पसंदीदा निक्स टूलसेट find/grep/sed/awk के साथ गठबंधन कर सकें।

क्योंकि यह रूबी में लिखा गया है, यह क्रॉस प्लेटफार्म होना चाहिए। एसडब्ल्यूआईजी भी क्रॉस प्लेटफार्म है इसलिए सबकुछ ठीक होना चाहिए।

यह इस चरण में काफी प्राचीन है और अजीब टेम्पलेट्स और सामानों को पार्स करने के मामले में आलसी सी ++ के रूप में मजबूत नहीं है। योगदान स्वागत है :)

0

मैंने आलसी सी ++ की कोशिश की लेकिन यह अब तक पुराना प्रतीत होता है और अब बनाए रखा नहीं जाता है। यह नवीनतम सी ++ 14 मानक का समर्थन नहीं करता है।

यही कारण है कि मैंने एएनटीएलआर 4 का उपयोग कर जावा में अपना खुद का टूल लिखने का फैसला किया। इसे स्कोर कहा जाता है और आप इसे यहां पा सकते हैं: https://github.com/underrated/Score

फिलहाल यह अपने बचपन में है और शायद बग से भरा हो सकता है लेकिन मैं इसे सुधारने की योजना बना रहा हूं। तो अगर आप चाहते हैं और प्रोजेक्ट के जिथब पेज पर किसी भी बग की रिपोर्ट करें तो इसे आज़माएं। मैं जितनी जल्दी हो सके उन्हें ठीक करने की कोशिश करूंगा।

+0

मुझे इस समय प्रीप्रोसेसर सशर्तों को संभालने की उम्मीद नहीं है, लेकिन मैं इसके लिए समर्थन जोड़ने की योजना बना रहा हूं। इसके अलावा, उपकरण कोड पर अर्थपूर्ण जांच करने का इरादा नहीं है। यह सिर्फ विधि कार्यान्वयन की पहचान करता है और फिर यह शीर्षलेख में विधि प्रोटोटाइप और स्रोत फ़ाइल में विधि कार्यान्वयन (साथ ही कुछ और "अलगाव") डालता है। यह कोड की शुद्धता बीमा करने के लिए डेवलपर पर निर्भर है (उदा। आईडीई का उपयोग करके)। यदि मूल कोड में वाक्य रचनात्मक/अर्थपूर्ण त्रुटियां हैं तो उत्पन्न जेनरेट होगा। लेकिन वे आईडीई या कंपाइलर द्वारा या तो मिल सकते हैं। –

+0

@IraBaxter आपको माइकल की समस्या के संदर्भ में चीजों की जटिल जटिलता की आवश्यकता क्यों होगी? उसे केवल कुछ कोड की प्रतिलिपि/चिपकाने/संशोधित करने की आवश्यकता है। #ifdefs के लिए विशेष उपचार वास्तव में आवश्यक है। टेम्पलेट को स्पर्श करने की आवश्यकता नहीं है, वे शीर्षलेख में रह सकते हैं। मैक्रो कॉल को पार्सर द्वारा सरल पहचानकर्ता या फ़ंक्शन कॉल के रूप में देखा जाएगा और उन्हें स्पर्श करने की आवश्यकता नहीं है। नामस्थानों के बारे में, सभी "उपयोग ..." कथन शीर्षलेख में रह सकते हैं। और "नेमस्पेस ... {...}" को हेडर और स्रोत फ़ाइल दोनों में कॉपी किया जा सकता है। क्या मैं कुछ भूल रहा हूँ? –

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