std::mem_fun
बहिष्कृत किया गया है। std::mem_fn
यह सब कुछ कर सकता है, और यह अधिक आसानी से करता है। दोनों के बीच संबंध std::bind1st
/std::bind2nd
और सी ++ 11 std::bind
के बीच संबंध के समान है। std::mem_fn
और std::bind
दोनों को विकसित किया गया था और std::bind1st
और std::mem_fun
के बाद सी ++ 98 मानक में बनाया गया था। तो इसका मतलब है कि हमें सी ++ 11 तक पुरानी चीजों को बेहतर विकल्प के साथ ठीक से बदलने के लिए इंतजार करना पड़ा।
उदाहरण के लिए, std::mem_fun
केवल उन सदस्यों के कार्यों से निपट सकता है जो एक या कोई तर्क नहीं लेते हैं। std::mem_fn
विविध है और उन सदस्यों से निपट सकता है जो किसी भी संख्या में तर्क लेते हैं।
आपको क्लास ऑब्जेक्ट (क्रमशः) के लिए पॉइंटर्स या संदर्भों के साथ सौदा करना चाहते हैं या नहीं, इसके आधार पर आपको std::mem_fun
और std::mem_fun_ref
के बीच भी चयन करने की आवश्यकता है। std::mem_fn
अकेले ही किसी के साथ सौदा कर सकता है, और स्मार्ट पॉइंटर्स के लिए भी समर्थन प्रदान करता है।
boost::mem_fn
के प्रलेखन बस है कि जब आप कोड है कि std::mem_fun
उम्मीद के साथ काम करने की आवश्यकता है जब std::mem_fun
उपयोग करने के लिए, और डाल बताते हैं, या कि अनुकूलनीय functors उम्मीद (जो एक अप्रचलित धारणा है * सी ++ 03 से)। उन मामलों के लिए आप std::mem_fn
में प्लग करने में सक्षम नहीं होंगे, इसलिए आपके पास यह है: आप विरासत के लिए std::mem_fun
का उपयोग करेंगे।
*: मेरा मतलब है कि नया कोड C++ 03 प्रोटोकॉल पर निर्भर नहीं होना चाहिए उदा। result_type
सदस्य प्रकार (std::result_of
जैसे नए लक्षणों का उपयोग करने के लिए यह अधिक परंपरागत है) - std::bind
/std::mem_fn
जैसी नई सुविधाएं वास्तव में उन सदस्यों को प्रदान करती हैं यदि वे समकक्ष सी ++ 03 कोड में मौजूद होंगी। मैं यह समझने के लिए आपको छोड़ देता हूं कि आपको पुराने कोड को अपडेट करना चाहिए या नहीं, जो इस व्यवहार पर निर्भर करते हुए std::mem_fn
के साथ अनुकूलनीय फ़ैक्टर पर निर्भर करता है।
स्रोत
2012-07-27 03:02:39
'std :: not1' और' std :: not2' अभी भी उन "अनुकूलनीय" टाइपपीफ की अपेक्षा करते हैं। – Cubbi
@ कब्बी: क्या वे सी ++ 11 का एकमात्र भाग हैं जो अभी भी करते हैं? – Scotty
@ स्कोटी जहां तक मैंने देखा है, हां, केवल गैर-बहिष्कृत भागों। और 'std :: function' और' std :: mem_fn' से 'std :: ref' और' std :: map :: value_comp' तक उन टाइपपीफ के साथ मज़दूर बनाने के कुछ 25 तरीके हैं। – Cubbi