को लैम्ब्डा और हस्तलिखित Juancho द्वारा प्रयोग किया जाता functor के अलावा पारित कर सकते हैं, तो आप संभावना boost::bind
(सी ++ 03 उपयोग करने के लिए) या std::bind
(सी ++ 11) और एक साधारण समारोह:
bool isNameOfObj(const std::string& s, const Type& obj)
{ return obj.getName() == s; }
//...
std::vector<Type>::iterator it = find_if(v.begin(), v.end(),
boost::bind(&isNameOfObj, myString, boost::placeholders::_1));
या, Type
एक विधि isName
है यदि:
std::vector<Type>::iterator it = find_if(v.begin(), v.end(),
boost::bind(&Type::isName, boost::placeholders::_1, myString));
यह पूर्णता के लिए है। सी ++ में मैं सी ++ 03 में लैम्बडास पसंद करूंगा, मैं केवल तभी उपयोग करूँगा जब तुलना फ़ंक्शन स्वयं पहले से मौजूद हो। यदि नहीं, तो मजेदार पसंद करते हैं।
पीएस: चूंकि सी ++ 11 में कोई पॉलिमॉर्फिक/टेम्पलेटेड लैम्ब्डा नहीं है, फिर भी यह अभी भी सी ++ 11 में है, उदाहरण के लिए यदि पैरामीटर प्रकार अज्ञात हैं, वर्तनी करना मुश्किल है, या अन्यथा कटौती करना आसान नहीं है।
स्रोत
2013-03-20 08:23:17
क्या एक ही नाम से एक से अधिक ऑब्जेक्ट हो सकते हैं? क्या आप उन सभी को ढूंढना चाहते हैं? –