Ich verwende std::string in meiner MFC-Anwendung und ich möchte sie in der Funktion Serialize() von doc speichern. Ich möchte sie nicht als CString speichern, weil es sein eigenes Zeug dort hinein schreibt und mein Ziel ist es, eine Datei zu erstellen, deren Format ich kenne und die von anderen Anwendungen gelesen werden kann, ohne CString zu benötigen. Ich möchte also meine std::strings als 4 Bytes (int) Stringlänge speichern, gefolgt von einem Puffer dieser Größe, der den String enthält.
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;
}
}
Der obige Code ist nicht gut und ich muss eine temporäre bfr zuweisen, um die Zeichenfolge zu lesen. Erstens kann ich die Zeichenkette direkt in std::string ohne den temporären Puffer lesen? Zweitens kann ich den << Puffer für std::string / CArchive überladen, so dass ich einfach ar << theString verwenden kann? Gibt es insgesamt eine bessere Möglichkeit, std::string mit dem CArchive-Objekt zu lesen/schreiben?