2008-09-21 13 views
104

स्टेटिक मेटाप्रोग्रामिंग (उर्फ "टेम्पलेट मेटाप्रोग्रामिंग") एक महान सी ++ तकनीक है जो संकलन-समय पर प्रोग्रामों को निष्पादित करने की अनुमति देती है। एक प्रकाश बल्ब के रूप में जल्द मेरे सिर में बंद हो गई के रूप में मैं इस विहित metaprogramming उदाहरण पढ़ें:सी ++ टेम्पलेट मेटाप्रोग्रामिंग के लिए सर्वश्रेष्ठ परिचय?

#include <iostream> 
using namespace std; 

template< int n > 
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; }; 

template<> 
struct factorial<0> { enum { ret = 1 }; }; 

int main() { 
    cout << "7! = " << factorial<7>::ret << endl; // 5040 
    return 0; 
} 

एक सी ++ स्थिर metaprogramming के बारे में अधिक जानने के लिए चाहता है, क्या सबसे अच्छा स्रोत हैं (किताबें, वेबसाइटों, ऑनलाइन कोर्सवेयर , जो कुछ)?

+40

लाइटबुल 'बंद' या 'चालू' चला गया? – horseyguy

+32

बंद। निश्चित रूप से बंद –

उत्तर

99

[उत्तर देना मेरे अपने प्रश्न]

सबसे अच्छा परिचय मैं अब तक मिल गया है अध्याय 10, "सी में स्टेटिक Metaprogramming ++" उत्पादक प्रोग्रामिंग से, तरीके, उपकरण, और अनुप्रयोग करज़िस्तोफ Czarnecki द्वारा कर रहे हैं

और Ulrich डब्ल्यू Eisenecker, आईएसबीएन -13: 9780201309775; और अध्याय 17, "Metaprograms" सी ++ टेम्पलेट्स की: पूरी गाइड डेविड Vandevoorder और निकोलाई एम Josuttis, ISBN-13 द्वारा: 9780201734843.

alt text http://ak.buy.com/db_assets/prod_images/941/30676941.jpgalt text http://ak.buy.com/db_assets/prod_images/235/31025235.jpgalt text http://ak.buy.com/db_assets/prod_images/704/30680704.jpgalt text http://ak.buy.com/db_assets/prod_images/218/39856218.jpg

टोड Veldhuizen एक उत्कृष्ट ट्यूटोरियल है here ।9780201704310. इस किताब को अन्य टेम्पलेट तकनीकों के साथ metaprogramming का एक सा मिक्स:

सामान्य रूप में C++ प्रोग्रामिंग के लिए एक अच्छा संसाधन आधुनिक सी ++ डिजाइन आंद्रेई Alexandrescu, ISBN-13 के द्वारा होता है। विशेष रूप से मेटाप्रोग्रामिंग के लिए, अनुभाग 2.1 "संकलन-समय सम्मिलन", 2.4 "मैपिंग इंटीग्रल कॉन्स्टेंट्स टू टाइप्स", 2.6 "टाइप टाइप करें", 2.7 "कन्वर्टिबिलिटी एंड इनहेरिटेंस ऑन कंपाइल टाइम", 2.9 "NullType और EmptyType" और 2.10 " लक्षण टाइप करें "।

सबसे अच्छा मध्यवर्ती/उन्नत संसाधन मैंने पाया सी ++ खाका Metaprogramming दाऊद इब्राहीम और अलेक्सी Gurtovoy, ISBN-13 के द्वारा होता है: 9780321227256

आप सिर्फ एक किताब पसंद किया है, सी ++ टेम्पलेट्स मिलती है: पूर्ण गाइड चूंकि यह सामान्य रूप से टेम्पलेट्स के लिए भी निश्चित संदर्भ है।

+2

टोड वेल्डुइज़ेन के टुकड़े से लिंक बेकार हो गया है। –

+1

मुझे यह विश्वास है: http://www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/meta-art.html – 0fnt

+1

लिंक अब तय किया गया है, धन्यवाद! – jwfearn

3

गूगल Alexandrescu, आधुनिक सी ++ डिजाइन: जेनेरिक प्रोग्रामिंग और डिजाइन पैटर्न लागू

4

Modern C++ सबसे अच्छा परिचय मैं पढ़ा है में से एक है। इसमें टेम्पलेट मेटाप्रोग्रामिंग के वास्तविक उपयोगी उदाहरण शामिल हैं। साथी पुस्तकालय Loki पर भी नज़र डालें।

22

आंद्रेई अलेक्जेंड्रेस्कू की Modern C++ Design पुस्तक में बहुत से और कुशल और कुशल आधुनिक सी ++ कोड के लिए अन्य चाल शामिल हैं और Loki लाइब्रेरी का आधार है।

Boost पुस्तकालयों का उल्लेख करने योग्य भी है, जो इन तकनीकों का भारी उपयोग करते हैं और आमतौर पर सीखने के लिए बहुत उच्च गुणवत्ता वाले होते हैं (हालांकि कुछ काफी घने हैं)।

4

वेल्डुइज़ेन के मूल पत्र अच्छे थे। यदि आप पूरी किताब के लिए तैयार हैं, तो वंदेवोर्डे की पुस्तक "सी ++ टेम्पलेट्स पूर्ण गाइड" है। और जब आप मास्टर कोर्स के लिए तैयार हों, तो अलेक्जेंड्रेस्कू के आधुनिक सी ++ डिज़ाइन को आजमाएं।

11

Modern C++ Design, अलेक्जेंड्रेसक्यू द्वारा एक शानदार पुस्तक और डिज़ाइन पैटर्न ढांचे। चेतावनी का शब्द, इस पुस्तक को पढ़ने के बाद मैंने सी ++ करना बंद कर दिया और सोचा "क्या बिल्ली है, मैं बस एक बेहतर भाषा चुन सकता हूं और इसे मुफ्त में प्राप्त कर सकता हूं"।

+4

"क्या बिल्ली है, मैं बस एक बेहतर भाषा चुन सकता हूं और इसे मुफ्त में प्राप्त कर सकता हूं" उम्म, आपका क्या मतलब है? मैं विशेष रूप से "मुक्त" द्वारा उलझन में हूं। और आपके मन में क्या दूसरी भाषा थी? –

+11

सी ++ टेम्पलेट मेटाप्रोग्रामिंग आपको सभी प्रकार की नई क्षमताओं जैसे गुजरने वाले प्रकार या प्रकारों की सूची तर्क आदि के रूप में देता है। इनमें से अधिकतर क्षमताओं गतिशील रूप से टाइप की गई भाषाओं जैसे पाइथन, नाइसर सिंटैक्स के साथ मौजूद हैं। –

+1

यदि आप ऐसी भाषा की तलाश में हैं जो आप सही प्रोग्राम लिख सकते हैं, तो पायथन सी ++ से बेहतर है। यदि आपको सी ++ प्रदान की जाने वाली कुछ अन्य चीजों की आवश्यकता है, तो C++ को लिस्प-जैसी क्षमता जोड़ने से C++ - ify दूसरी भाषा की कोशिश करने से बेहतर हो सकता है। –

6

दो अच्छी किताबें जो मन में वसंत हैं:

  • आधुनिक सी ++ डिजाइन/आंद्रेई Alexandrescu (यह वास्तव में नाम होने के बावजूद 7 साल का है!)
  • सी ++ टेम्पलेट: पूरी गाइड/Vandevoorde & Josuttis

यह काफी गहन क्षेत्र है, इसलिए इनमें से एक अच्छी किताब निश्चित रूप से वेबसाइटों पर अनुशंसित है। कुछ और उन्नत तकनीकों में आप कुछ समय के लिए कोड का अध्ययन कर सकते हैं ताकि यह पता चल सके कि वे कैसे काम करते हैं!

5

किताबों की एक बड़ी सूची नहीं होगी, क्योंकि बहुत से अनुभव वाले लोगों की सूची सीमित है। 2000 में पहली सी ++ टेम्पलेट प्रोग्रामिंग कार्यशाला के आसपास वास्तविक रूप से टेम्पलेट मेटाप्रोग्रामिंग शुरू हुई, और अब तक नामित कई लेखकों ने भाग लिया। (आईआईआरसी, आंद्रेई नहीं थे।) इन पायनियरों ने इस क्षेत्र को बहुत प्रभावित किया, और मूल रूप से जो लिखा जाना चाहिए अब लिखा गया है। व्यक्तिगत रूप से, मैं सलाह देता हूं कि वंदेवोर्डे & जोसुटिस। यदि आप मैदान में नए हैं तो अलेक्जेंड्रेस्कू एक कठिन किताब है।

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