निर्धारित करने के लिए एक सीमा के एक तत्व होता है कि क्या निम्नलिखित खिलौना कोड पर विचार करें:मैं लैम्ब्डा के अंदर एक फ़ंक्शन से कैसे लौट सकता हूं?
template<typename Iter, typename T>
bool contains1(Iter begin, Iter end, const T& x)
{
for (; begin != end; ++begin)
{
if (*begin == x) return true;
}
return false;
}
(हाँ मैं जानता हूँ कि, मानक पुस्तकालय में पहले से ही बिल्कुल ठीक एल्गोरिदम देखते हैं, उस बिंदु नहीं है।)
कैसे क्या मैं for_each
और लैम्ब्डा के साथ एक ही चीज़ लिखूंगा? निम्नलिखित काम नहीं करता है ...
template<typename Iter, typename T>
bool contains2(Iter begin, Iter end, const T& x)
{
std::for_each(begin, end, [&x](const T& y) {
if (x == y) return true;
});
return false;
}
... क्योंकि यह केवल समारोह से नहीं, बल्कि लैम्ब्डा से वापस आएगा।
क्या मुझे लैम्ब्डा से बाहर निकलने के लिए अपवाद फेंकना है? फिर, इस विशिष्ट समस्या के लिए शायद एक दर्जन बेहतर समाधान हैं जिनमें लैम्ब्स शामिल नहीं हैं, लेकिन यह वह नहीं है जो मैं पूछ रहा हूं।
आप इस तरह से लैम्ब्डा से वापस नहीं आ सकते हैं। लैम्ब्डा कंपाइलर के लिए है, एक और समारोह, कहीं और पारित किया जा सकता है। लैम्ब्डा को दूसरी विधि में पास करने के लिए यह मूर्खतापूर्ण होगा, जहां यह कॉल 2 स्तर तक कूद जाएगा, है ना? – nothrow
यदि आप सभी तत्वों को संसाधित नहीं करना चाहते हैं तो आपको वास्तव में for_each का उपयोग नहीं करना चाहिए। –
आप यह नहीं कर सकते हैं। आप कई अन्य तरीकों से एक ही प्रभाव प्राप्त कर सकते हैं। क्या आपके पास एक गैर-प्रदूषित उदाहरण है जहां यह वास्तव में सार्थक होगा? – Mankarse