6 Stimmen

Kann ich den Operator CArchive << überladen, um mit std::string zu arbeiten?

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?

0voto

l33t Punkte 15267

Ich nehme an, Sie könnten gegen die STL-Richtlinien verstoßen und erben std::string und fügen Sie Ihre eigenen Buffer Getter/Setter hinzu. Überschreiben Sie dann den Kopierkonstruktor für std::string und übertragen Sie den Besitz des Puffers.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X