C++ Academy · पाठ

Generic lambdas और closures C++14

auto parameters वाली generic lambdas लिखें और closure types पर विचार करें।

पाठ 3, कुल 4 में से13 चरण

Generic lambdas और closures C++14, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

जेनेरिक लैम्ब्डा

C++14 आपको लैम्ब्डा की पैरामीटर सूची में auto लिखने देता है। कंपाइलर टेम्पलेट वाला operator() उत्पन्न करता है — लैम्ब्डा किसी भी प्रकार को स्वीकार करता है।

auto print = [](const auto& x) {
    std::cout << x << "\n";
};

print(42);
print("hello");
print(3.14);

ये कैसे काम करते हैं

लैम्ब्डा टेम्पलेट वाले operator() की क्लास में बदल जाता है। प्रकारों का प्रत्येक विशिष्ट संयोजन पर्दे के पीछे एक अलग फ़ंक्शन का इंस्टैंशिएशन करता है।

उपयोग के मामले

जेनेरिक लैम्ब्डा उन एल्गोरिदम में विशेष रूप से उपयोगी होते हैं जो कई प्रकारों के साथ काम करते हैं।

std::vector<int> ints = {1, 2, 3};
std::vector<std::string> strs = {"a", "b"};

auto printAll = [](const auto& container) {
    for (const auto& x : container) std::cout << x << " ";
};
printAll(ints);
printAll(strs);

एकाधिक auto पैरामीटर

प्रत्येक auto स्वतंत्र होता है — अलग-अलग पैरामीटर अलग-अलग प्रकारों में निर्धारित हो सकते हैं।

auto add = [](auto a, auto b) {
    return a + b;
};
std::cout << add(1, 2.5);            // 3.5
std::cout << add(std::string("Hi"), "!");  // Hi!

क्लोज़र ऑब्जेक्ट होते हैं

प्रत्येक लैम्ब्डा एक्सप्रेशन एक क्लोज़र बनाता है — कंपाइलर द्वारा उत्पन्न विशिष्ट क्लास का एक इंस्टेंस। क्लोज़र कैप्चर किए गए चरों को सदस्यों के रूप में संग्रहीत करता है।

प्रत्येक लैम्ब्डा का विशिष्ट प्रकार

प्रत्येक लैम्ब्डा एक्सप्रेशन का प्रकार विशिष्ट होता है, भले ही दो लैम्ब्डा का टेक्स्ट एक जैसा हो। प्रकार का नाम सीधे नहीं लिखा जा सकता — auto या std::function का उपयोग करें।

लैम्ब्डा को std::function में संग्रहीत करना

किसी ऐसे चर में लैम्ब्डा रखने के लिए जिसका प्रकार ज्ञात हो, उसे std::function में लपेटें। इससे थोड़ा अतिरिक्त खर्च जुड़ता है, लेकिन कॉल करने योग्य वस्तुओं पर रनटाइम बहुरूपता संभव होती है।

#include <functional>
std::function<int(int)> doubler = [](int x) { return x * 2; };

प्रकार-लोपन की लागत

std::function प्रकार-लोपन का उपयोग करता है — यह किसी भी संगत कॉल करने योग्य वस्तु को संग्रहीत कर सकता है, लेकिन इसमें हीप आवंटन और वर्चुअल कॉल का अतिरिक्त खर्च होता है। अत्यधिक बार चलने वाले लूप में इसका उपयोग न करें।

जब auto पर्याप्त हो

कम समय तक जीवित रहने वाले लैम्ब्डा के लिए (एल्गोरिदम को दिए गए या auto में संग्रहीत), प्रकार-लोपन की आवश्यकता नहीं होती और कोई अतिरिक्त खर्च नहीं होता।

लैम्ब्डा लौटाना

लैम्ब्डा लौटाने के लिए रिटर्न प्रकार के रूप में auto का उपयोग करें। प्रत्येक कॉल एक नया क्लोज़र बनाता है।

auto makeAdder(int n) {
    return [n](int x) { return x + n; };
}

auto add5 = makeAdder(5);
std::cout << add5(10);   // 15

उच्च-क्रम फ़ंक्शन

लैम्ब्डा C++ को उच्च-क्रम फ़ंक्शन के लिए सुविधाजनक बनाते हैं — ऐसे फ़ंक्शन जो अन्य फ़ंक्शन को लेते या लौटाते हैं।

त्वरित जाँच

C++14 के लैम्ब्डा पैरामीटर सूची में auto का क्या अर्थ है?

पुनरावलोकन

C++14 के जेनेरिक लैम्ब्डा कंपाइल-टाइम बहुरूपता के लिए auto पैरामीटर का उपयोग करते हैं। प्रत्येक लैम्ब्डा एक विशिष्ट क्लोज़र प्रकार होता है — उसे रखने के लिए auto का उपयोग करें, या जब प्रकार-लोपन आवश्यक हो तब std::function का।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “Generic lambdas और closures C++14” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Generic lambdas और closures C++14” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Generic lambdas और closures C++14” में मैं क्या सीखूँगा?

auto parameters वाली generic lambdas लिखें और closure types पर विचार करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“Generic lambdas और closures C++14” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Function objects और functors
  2. Lambda captures: by-value, by-reference, mutable
  3. Generic lambdas और closures C++14
  4. std::function: type-erased callables
← C++ Academy पर वापस जाएँ