C ++ टेम्पलेट मेटाप्रोग्रामिंग के लिए सर्वश्रेष्ठ परिचय? [बन्द है]


112

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

#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;
}

यदि कोई C ++ स्टैटिक मेटाप्रोग्रामिंग के बारे में अधिक जानना चाहता है, तो सबसे अच्छे स्रोत (किताबें, वेबसाइट, ऑन-लाइन कोर्सवेयर, जो भी हो) क्या हैं?


43
lightbulb 'बंद' या 'चालू' हो गया?
घोड़ागुए

36
बंद। निश्चित रूप से बंद।
थॉमस एडिंग

जवाबों:


108

[अपने सवाल का जवाब देना]

मेरे द्वारा अब तक मिले सबसे अच्छे परिचय अध्याय 10 हैं, जेनरिक प्रोग्रामिंग, मेथड्स, टूल्स, और एप्लीकेशन से क्रेजीसॉफ्ट कॉज़रनेकी और उलरिच डब्ल्यू। एनेनेकर, आईएसबीएन -13: 9780201309775; और अध्याय 17, सी ++ टेम्प्लेट्स के "मेटाप्रोग्राम्स" : डेविड वंदेवेदर और निकोलई एम। जोसुटिस द्वारा पूर्ण गाइड , आईएसबीएन -13: 9780201734843।

वैकल्पिक शब्द वैकल्पिक शब्द वैकल्पिक शब्द वैकल्पिक शब्द

टोड वेल्डुइज़न के पास यहाँ एक उत्कृष्ट ट्यूटोरियल है

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

सबसे अच्छा मध्यवर्ती / उन्नत संसाधन जो मैंने पाया है वह डेविड एब्राहम्स और अलेक्सी गुर्टोवेय, आईएसबीएन -13: 9780321227256 द्वारा सी ++ टेम्प्लेट मेटाप्रोग्रामिंग है।

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


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

1
मेरा यह मानना ​​है: www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/…
0fnt

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

लिंक फिर से टूट गया है!
पॉल

1
धन्यवाद @jwfearn, मैंने लेख पढ़ा, हालांकि मुझे यह अधिक दिलचस्प लगा: youtube.com/watch?v=Am2is2QCvxY (इसके दो भाग हैं)। यह वाल्टर ई। ब्राउन द्वारा एक बात है: आधुनिक टेम्प्लेट मेटाप्रोग्रामिंग: एक संकलन
पॉल

24

आंद्रेई अलेक्जेंड्रेस्कु की मॉडर्न C ++ डिज़ाइन बुक में इस और अन्य ट्रिक्स के बारे में बताया गया है, जो शीघ्र और कुशल आधुनिक C ++ कोड के लिए है और यह लोकी लाइब्रेरी का आधार है ।

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


12

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


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

12
C ++ टेम्प्लेट मेटाप्रोग्रामिंग आपको सभी प्रकार की नई क्षमताएं प्रदान करता है जैसे पासिंग प्रकार या प्रकार की सूची जैसे तर्क आदि। इन क्षमताओं में से अधिकांश गतिशील रूप से टाइप की गई भाषाओं जैसे कि पायथन में मौजूद हैं, अच्छे सिंटैक्स के साथ।
फ्लोरियन बॉश

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

6

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

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

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


5

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


5

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


4

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


4

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.