operator<<
ओवरलोडिंग पर toString()
-स्टाइल विधि की नकल करने के लिए उपलब्ध जानकारी का एक टन है जो एक जटिल ऑब्जेक्ट को स्ट्रिंग में परिवर्तित करता है। मुझे में भी में दिलचस्पी है, जिसमें किसी ऑब्जेक्ट में स्ट्रिंग को deserialize करने के लिए उलटा, operator>>
लागू किया गया है।सुरक्षित रूप से स्ट्रीम ऑपरेटर ओवरलोडिंग >>
STL
स्रोत का निरीक्षण करके, मैं इकट्ठा कर लिया है कि:
istream &operator>>(istream &, Object &);
प्रकार Object
की एक वस्तु deserializing के लिए सही समारोह हस्ताक्षर होगा। दुर्भाग्यवश, मुझे इस बात को ठीक से कार्यान्वित करने के लिए नुकसान हुआ है - विशेष रूप से त्रुटियों को कैसे संभालना है:
- स्ट्रीम में अमान्य डेटा कैसे इंगित करें? अपवाद फेंको?
- स्ट्रीम में विकृत डेटा है तो स्ट्रीम को किस स्थिति में होना चाहिए?
- ऑपरेटर चेनिंग के संदर्भ को वापस करने से पहले किसी भी झंडे को रीसेट किया जाना चाहिए?
यह भी सुनिश्चित करें कि आप कुछ भी करने का प्रयास करने से पहले 'विफल' बिट की जांच करें। यदि यह पहले से सेट है, तो बस स्ट्रीम वापस करें। – KTC
सलाह के लिए धन्यवाद, विशेष रूप से अपवादों के बजाय 'विफल' बिट का उपयोग करना। असफल बिट को सेट करने के अलावा, क्या मुझे स्ट्रीम की सामग्री के बारे में कोई गारंटी देनी चाहिए? उदाहरण के लिए, यदि मैं 'विफल' बिट सेट करता हूं, तो क्या स्ट्रीम अपरिवर्तित होनी चाहिए? –
यह अनिवार्य रूप से मैं क्या कहने जा रहा था, लेकिन आपने तेज़ी से जवाब दिया! मैं जोड़ूंगा कि मौजूदा कार्यान्वयन क्या है, यह देखकर सही उत्तर मिलता है, जो आप वर्णन कर रहे हैं। साथ ही, मैं ध्यान दूंगा कि विकृत डेटा जैसी कोई चीज़ नहीं है, इसे पढ़ने के लिए गलत प्रारूप के रूप में; उस स्थिति में, आप यह सुनिश्चित करना चाहते हैं कि चर अपरिवर्तित है, और (यदि आप असफल बिट सेट करते हैं और खराब बिट नहीं) तो स्ट्रीम से कोई भी वर्ण खो नहीं गया है। –