में std :: map तत्वों तक पहुंचने के लिए बाध्य करें मेरे पास एक नक्शा है जो एक कुंजी के साथ एक साधारण संरचना संग्रहीत करता है। संरचना में दो सदस्य कार्य हैं, एक दूसरा नहीं है। मैंने बिना किसी समस्या के std :: for_each का उपयोग करके कॉन्स्ट फ़ंक्शन को कॉल करने में कामयाब रहा है, लेकिन मुझे गैर-कॉन्स्ट फ़ंक्शन को कॉल करने में कुछ समस्याएं हैं।बूस्ट। Std :: for_each
struct MyStruct {
void someConstFunction() const;
void someFunction();
};
typedef std::map<int, MyStruct> MyMap;
MyMap theMap;
//call the const member function
std::for_each(theMap.begin(), theMap.end(),
boost::bind(&MyStruct::someConstFunction, boost::bind(&MyMap::value_type::second, _1)));
//call the non-const member function
std::for_each(theMap.begin(), theMap.end(),
boost::bind(&MyStruct::someFunction, boost::bind(&MyMap::value_type::second, _1)));
स्थिरांक सदस्य समारोह के लिए कॉल ठीक काम करता है, लेकिन यह को बढ़ावा देने लगता है आंतरिक रूप से कहीं न कहीं एक स्थिरांक MyStruct उम्मीद, और इस तरह MSVC7.1 में निम्नलिखित संकलन त्रुटि के साथ विफल।
बढ़ावा \ बाँध \ mem_fn_template.hpp (151): त्रुटि C2440: 'तर्क': 'MyStruct * स्थिरांक' को 'स्थिरांक MyStruct * __ W64' से परिवर्तित नहीं कर सकते
मैं किसी भी सराहनीय होगा टेम्पलेट पैरामीटर को सही तरीके से सेट करने के तरीके पर सहायता करें, इसलिए बाइंड सही ढंग से पैरामीटर को पहचानता है और मुझे गैर कॉन्स फ़ंक्शन को कॉल करने देता है।
धन्यवाद, कार्ल
अगर आप बैक अप लें और हमें बताएं कि आप वास्तव में यहां क्या करने की कोशिश कर रहे हैं?बूस्ट :: बाइंड * हो सकता है * के साथ नक्शे के साथ for_each का उपयोग करना उचित हो सकता है, लेकिन संभावनाएं बहुत अच्छी हैं कि एक अलग सामान्य दृष्टिकोण बेहतर काम करेगा (कई बार इस प्रकार का सवाल उठता है, ऐसा इसलिए है क्योंकि 'std :: for_each' एक खराब विकल्प है स्थिति के लिए, और 'std :: copy' या std :: accumulate' जैसी कुछ चीज़ नौकरी को और अधिक सरलता से करेगी)। –
MyStruct का उपयोग कण प्रणाली के प्रकार में किया जाता है, जहां MyStruct कण है। कॉन्स फ़ंक्शन एक ड्रॉ() फ़ंक्शन है, गैर-कॉन्स्ट फ़ंक्शन नई स्थिति की गणना करता है। मानचित्र में कुंजी निर्माण की तारीख है। वैसे भी, इस बिंदु पर मैंने सवाल पोस्ट किया था कि यह काम करने के तरीके के बारे में अधिक था, अगर यह शुरुआत में एक अच्छा डिजाइन था। – Carl