我在我的MFC应用程序中使用std::string,并希望将其存储在文档的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;
}
}
上述代码并不完美,我必须分配一个临时缓冲区来读取字符串。首先,能否直接将字符串读入std::string而无需使用临时缓冲区?其次,我能否重载std::string / CArchive的<<缓冲区,以便我可以简单地使用ar << theString? 总体而言,有没有更好的方法使用CArchive对象读写std::string?
std::vector<char>
或者既然您在MFC环境中,可以使用CString
。 - AJG85