मैं लैम्ब्डा समारोह इस्तेमाल किया std::condition_variable
प्रतीक्षा() फ़ंक्शन करने के लिए इसे पारित करने के लिए पारित करने के लिए है, लेकिन यह मामला नहीं है। मैं लैम्ब्डा फ़ंक्शंस का उपयोग करता हूं जो किसी भी पैरामीटर को प्राप्त नहीं करते हैं, और सबकुछ मेरे लिए बिल्कुल स्पष्ट है। लेकिन मैं पूरी तरह से समझ में नहीं आता कि कैसे लामडबा फ़ंक्शन का उपयोग किया जाता है जिसमें पैरामीटर सूची होती है। पैरामीटर के साथ लैम्ब्डा दिखाया जाता है? उन्हें पैरामीटर कैसे पास करें?सी ++ 11 लैम्ब्डा समारोह - कैसे पैरामीटर
उत्तर
मानकों के साथ लैम्ब्डा दिखाएँ उपयोग किया जाता है? उन्हें पैरामीटर कैसे पास करें?
यह बिल्कुल प्रतिदेय वस्तु के किसी भी अन्य प्रकार के साथ की तरह काम करता है:
#include <iostream>
int main()
{
auto l = [] (int i) { std::cout << "The answer is " << i; };
l(42);
}
यह भी ध्यान दें, कि आप यह आह्वान करने के लिए में एक चर में एक लैम्ब्डा स्टोर करने के लिए जरूरत नहीं है। निम्नलिखित उपरोक्त कार्यक्रम के पुनर्लेखन के लिए एक वैकल्पिक तरीका है:
#include <iostream>
int main()
{
[] (int i) { std::cout << "The answer is " << i; } (42);
// ^^^^
// Invoked immediately!
}
एक लैम्ब्डा समारोह (तथाकथित "लैम्ब्डा बंद") के प्रकार संकलक द्वारा परिभाषित किया गया है, और एक फोन ऑपरेटर जिसका साथ एक functor है हस्ताक्षर वह है जिसे आप लैम्ब्डा को परिभाषित करते समय निर्दिष्ट करते हैं। इसलिए, आप एक लैम्ब्डा वास्तव में फोन के रूप में आप एक functor फोन करता था (उदाहरण बिल्कुल के रूप में आप एक समारोह कहेंगे - या किसी प्रतिदेय वस्तु)।
इस प्रकार, यदि आप किसी ऑब्जेक्ट को लैम्ब्डा असाइन करना चाहते हैं, तो सबसे अच्छा अभ्यास है कि संकलक auto
का उपयोग कर अपने प्रकार को कम करने दें। यदि आप नहीं चाहते या auto
उपयोग नहीं कर सकते हैं, तो आप कर सकते हैं:
गैर पर कब्जा करने के लिए lambdas उपयोग समारोह संकेत (कब्जा lambdas संकेत दिए गए कार्य करने के लिए परिवर्तनीय नहीं हैं)। ऊपर मामले में, इस प्रकार, निम्नलिखित भी काम करेगा:
#include <iostream> int main() { void (*f)(int) = [] (int i) { std::cout << "The answer is " << i; }; f(42); }
उपयोग
std::function
(यह भले ही लैम्ब्डा कैप्चर कर रहा है हमेशा संभव है,):#include <iostream> #include <functional> int main() { std::function<void(int)> f = [] (int i) { std::cout << "The answer is " << i; }; f(42); }
मुझे प्यार है जब लोग जो समझा सकते हैं, यह सबके लिए आसान तरीका है :) धन्यवाद एंडी !! –
@ जॉनी पॉलिंग: प्रशंसा के लिए धन्यवाद :) –
auto lambda = [] (int a, int b) { return a + b; };
assert(lambda(1, 2) == 3);
आह की मदद की! और यहां ऑटो int int (* पी) (int, int) छुपाता है? – Littlebitter
lambdas के प्रकार @Littlebitter इसलिए आप की जरूरत 'auto' कार्यान्वयन से परिभाषित करता है। आप फ़ंक्शन पॉइंटर्स में कुछ लैम्ब्स (जो कुछ भी कैप्चर नहीं करते हैं) को परिवर्तित कर सकते हैं, लेकिन यह उनका वास्तविक प्रकार नहीं है (इसी प्रकार आप 'int' को 'long' में कैसे परिवर्तित कर सकते हैं, लेकिन 'int'' long')। –
और अगर लैम्ब्डा [] हो जाएगा (int एक, int ख) -> पूर्णांक {वापसी ए + बी; }; ऑटो के बिना, वर्णित प्रकार के साथ फ़ंक्शन वैरिएबल को पॉइंटर बनाना संभव होगा? – Littlebitter
आप डॉन ' टी को अपने लैम्ब्डा को पकड़ने के लिए एक वैरिएबल की भी आवश्यकता है - आप इसे सीधे कॉल कर सकते हैं:
std::cout << [](int n) { return n + 1 ; } (99) << std::endl ;
- 1. लैम्ब्डा समारोह चर सी ++ 11
- 2. लैम्ब्डा समारोह अज्ञात पैरामीटर
- 3. सी ++ 11 लैम्ब्डा
- 4. सी ++ 11 constexpr समारोह पास पैरामीटर
- 5. मेकिंग समारोह टेम्पलेट पैरामीटर सी ++ 11
- 6. सी ++ 11: लैम्ब्डा, करी
- 7. सी ++ 11 लैम्ब्डा
- 8. सी ++ 11 लैम्ब्डा पैरामीटर के रूप में पासिंग फ़ंक्शन
- 9. सी ++ 11 - तरह समारोह
- 10. कास्ट लैम्ब्डा :: पैरामीटर पैक के साथ समारोह
- 11. लैम्ब्डा समारोह से लैम्ब्डा अभिव्यक्ति
- 12. सी # लैम्ब्डा अज्ञात पैरामीटर
- 13. लैम्ब्डा समारोह
- 14. सी: संकेत समारोह (पैरामीटर?)
- 15. लैम्ब्डा: समारोह
- 16. विम और सी ++ 11 लैम्ब्डा: ऑटो इंडेंटेशन
- 17. सी ++ 11 std :: समारोह और सही अग्रेषण
- 18. बूस्ट ट्रांसफर इटरेटर और सी ++ 11 लैम्ब्डा
- 19. एक सी ++ 11 लैम्ब्डा में संदर्भ
- 20. सी ++ 11 लैम्ब्डा अभिव्यक्ति - कैप्चर बनाम तर्क
- 21. सी ++ 11 एक पैरामीटर पैक
- 22. सी ++ 11
- 23. सी # पैरामीटर कीवर्ड और समारोह
- 24. पास लैम्ब्डा अभिव्यक्ति C++ 11
- 25. सी ++: लैम्ब्डा के अंदर पैरामीटर पैक विस्तार
- 26. एक समारोह को लैम्ब्डा
- 27. सी ++ 11 लैम्ब्डा कैप्चर घोषणा मूल्य पर कैप्चर द्वारा
- 28. सी ++ 11
- 29. कैसे एक समारोह पैरामीटर
- 30. सी ++ 11 प्रकार अनुमान नहीं है जब std :: समारोह या लैम्ब्डा कार्यों
लैम्बडास पर आपको जो भी संसाधन मिलता है, वह समझाएगा कि कैसे मी पैरामीटर ले लो। – chris
@chris मैं तो बनाने के पैरामीटर पर ध्यान देने HPW पता है - [] (पूर्णांक पैरामीटर) {लैम्ब्डा शरीर}, लेकिन इस कार्यक्रम मैं इस लैम्ब्डा प्रयोग करेंगे? – Littlebitter
बस एक समारोह की तरह। – chris