Могу ли я перегрузить оператор CArchive << для работы с std :: string?

Я использую std :: string в моем Приложение MFC, и я хочу сохранить его в функции Serialize () документа. Я не хочу хранить их как CString, потому что оно записывает туда свои собственные данные, и моя цель - создать файл, формат которого я знаю и который может быть читается другим приложением без использования CString. Поэтому я хотел бы сохранить мои std :: strings как длину строки 4 байта (int), за которой следует буфер такого размера, содержащий строку.

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;
    }
}

Приведенный выше код не очень хорош и Мне нужно выделить временный bfr для чтения строки. Во-первых, могу ли я прочитать строку непосредственно в std :: string без временного буфера? Во-вторых, могу ли я перегрузить буфер << для std :: string / CArchive, чтобы я мог просто использовать ar << theString? В целом, есть ли лучший способ чтения / записи std :: string с использованием объекта CArchive?

6
задан zar 16 September 2011 в 14:49
поделиться