के साथ अधिभारित ऑपरेटर मैं मल्टी-टाइप मैप धारक पर काम कर रहा हूं। यह सभी आदिम प्रकारों और साथ ही structs के साथ भी काम करता है। बिंदु। हालांकि, अगर मैं एक समर्थित प्रकार (कॉलबैक के लिए इस्तेमाल किया) के रूप में std :: समारोह जोड़ना चाहते हैं तो संकलक शिकायत:std :: function पैरामीटर
MT.cpp: 426: 15: नहीं व्यवहार्य अतिभारित '='
मीट्रिक टन । एच: 31: 7: अभ्यर्थी समारोह (निहित प्रति असाइनमेंट ऑपरेटर) व्यवहार्य नहीं है: 'ज्ञात ' से कोई ज्ञात नहीं है ('lambda at MT.cpp: 426: 17)' to sharkLib :: MT ' पहले तर्क के लिए
MT.h: 31: 7: अभ्यर्थी कार्य (अंतर्निहित कदम असाइनमेंट ऑपरेटर) व्यवहार्य नहीं है: '(लैम्ब्डा ए से कोई ज्ञात रूपांतरण नहीं) टी MT.cpp: 426: 17) sharkLib ::
मैं वास्तव में =
ऑपरेटर को ओवरलोड नहीं है, लेकिन बजाय 1 तर्क के लिए मीट्रिक टन '' में समर्थित प्रकार प्रति समर्पित निर्माता के साथ []
ओवरलोड।
ज
protected:
map<string,MT> valueMap;
public:
MT (int value);
MT (std::function<void(Ref*)> ccb);
virtual MT& operator[] (const char* key);
सीपीपी
MT::MT (int value)
{
this->type = ValueType::intValue;
this->value.int_ = value;
}
MT::MT (std::function<void(Ref*)> value)
{
this->type = ValueType::ccbValue;
this->value.ccb_ = value;
}
MT& MT::operator[] (const char* key)
{
return this->valueMap[key];
}
उपयोग
MT mt;
mt["int"] = 1;
mt["ccb"] = [](Ref *){ CCLOG("Pressed"); };
यह अंतिम पंक्ति त्रुटि के साथ एक है।
संभवतः यहां उत्तर दिया गया: http: // stackoverflow।कॉम/प्रश्न/13358672/कैसे-टू-कन्वर्ट-ए-लैम्ब्डा-टू-ए-स्टडफंक्शन-उपयोग-टेम्पलेट्स – Chris
क्या मुझे पूछने की हिम्मत है कि क्यों ctors और 'ऑपरेटर []' एक ही प्रकार पर हैं? – Yakk