मैं एक वर्ग है कि एक नक्शाअतिभारित ऑपरेटर फेंक नहीं अपवाद
Any& Map::operator[](const unsigned int field) const
{
try
{
iterator it;
if ((it = m_fields.find(field)) != m_fields.end())
return it->second;
throw std::runtime_error("Field " + boost::lexical_cast<std::string>(field) + " not found.");
}
catch(boost::bad_any_cast&)
{
throw std::runtime_error("Failed conversion field " + boost::lexical_cast<std::string>(field) + " using boost::any_cast ");
}
}
मैं जब क्षेत्र मानचित्र में मौजूद है तो कार्यक्रम एक बुरी बात पर क्रैश नहीं होता नहीं है यह एक अपवाद फेंक करना चाहते हैं है, लेकिन फेंक ओवरलोडेड ऑपरेटर पर काम नहीं कर रहा है, प्रोग्राम किसी भी तरह दुर्घटनाग्रस्त हो जाता है ताकि फेंक या पकड़ को अनदेखा किया जा सके। यदि मैं एक ही कोड का उपयोग करता हूं लेकिन एक सामान्य फ़ंक्शन के साथ
Any& Map::get(const unsigned int field) const
{
//...
यह काम करता है।
क्या मैं कुछ सी ++ सीमा में भाग गया था या क्या मैं कुछ गलत कर रहा हूं?
--EDIT:
मैं डिबगर भाग गया और मेरे आश्चर्य है कि कोड भी निष्पादित नहीं करता है करने के लिए, किसी अन्य विधि
Any& Map::operator[](const unsigned int field)
{
iterator it;
if ((it = m_fields.find(field)) == m_fields.end())
{
Any newValue;
m_fields[field] = newValue;
return m_fields[field];
}
return it->second;
}
करता है और दुर्घटना को बढ़ावा के कारण होती है पर जोर कोई भी जो एक अनियमित चर को परिवर्तित करने का प्रयास करता है। इस विधि शायद
Map a;
a[3] = "foo";
की तरह, नक्शे पर आवेषण पर प्रयोग किया जाता है तो मुझे लगता है मैं जब ऑपरेटर एक atribution पर या किसी और इस ऑपरेटर के उपयोग पर प्रयोग किया जाता है अंतर करने के लिए कोई रास्ता नहीं है लगता है के लिए अत्यधिक असुरक्षित है
व्यक्तिगत तौर पर मैं 'find' और अलग लाइनों – pkit
यह पर तुलना कर दिया जाएगा: आपका
Map
वर्ग दो कार्यget
औरset
, और गैर स्थिरांक होते हैंoperator[]
एक प्रॉक्सी जो लग रहा है कि वापसी होगी (शायद) आपकी समस्या का कारण नहीं है, लेकिन आपको मूल्य से वापस लौटना होगा - आप अस्थायी के संदर्भ को वापस नहीं कर सकते हैं। –@pkit और इसे परिभाषित करने वाले कथन में 'it' प्रारंभ करें। –