मैं अपने एमएफसी एप्लिकेशन में std :: स्ट्रिंग का उपयोग कर रहा हूं और मैं इसे दस्तावेज़ के Serialize() फ़ंक्शन में संग्रहीत करना चाहता हूं। मैं उन्हें सीएसटींग के रूप में स्टोर नहीं करना चाहता क्योंकि यह वहां अपनी खुद की चीजें लिखता है और मेरा लक्ष्य एक फाइल बनाना है जिसे मैं प्रारूप के बारे में जानता हूं और CString की आवश्यकता के बिना अन्य एप्लिकेशन द्वारा पढ़ा जा सकता है। इसलिए मैं अपने std :: स्ट्रिंग्स को 4 बाइट्स (int) स्ट्रिंग लम्बाई के रूप में स्टोर करना चाहता हूं जिसके बाद स्ट्रिंग युक्त उस आकार के बफर द्वारा स्टोर किया जाना चाहिए।क्या मैं std :: स्ट्रिंग के साथ काम करने के लिए कैरचिव << ऑपरेटर को अधिभारित कर सकता हूं?
void CMyDoc::Serialize(CArchive& ar)
{
std::string theString;
if (ar.IsStoring())
{
// TODO: add storing code here
int size = theString.size();
ar << size;
ar.Write(theString.c_str(), size);
}
else
{
// TODO: add loading code here
int size = 0;
ar >> size;
char * bfr = new char[ size ];
ar.Read(bfr, size);
theString = bfr;
delete [] bfr;
}
}
उपरोक्त कोड बहुत अच्छा नहीं है और मुझे स्ट्रिंग पढ़ने के लिए एक temp bfr आवंटित करना होगा। सबसे पहले मैं स्ट्रिंग :: स्ट्रिंग में स्ट्रिंग को सीधे temp बफर के बिना पढ़ सकता हूं? दूसरा, क्या मैं < < std :: string/crchive के लिए बफर अधिभारित कर सकता हूं, इसलिए मैं केवल ar < < theString का उपयोग कर सकता हूं? कुल मिलाकर सीआरडी :: स्ट्रिंग को कैरचिव ऑब्जेक्ट का उपयोग करके पढ़ने/लिखने का एक बेहतर तरीका है?
मैंने यह कोशिश की है लेकिन c_str() एक 'const char *' देता है और यह एक समस्या है। मैं शायद इसे 'char *' पर टाइप कर सकता हूं लेकिन यह कुछ हद तक c_str() फ़ंक्शन का उल्लंघन करेगा। – zar
इस प्रकार "यह मत करो" टिप्पणी। आप 'std :: vector' का उपयोग कर सकते हैं या चूंकि आप एमएफसी भूमि उपयोग में हैं 'CString' –
AJG85