Я использую 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?