我在我的MFC应用程序中使用std :: string,我想将它存储在doc的Serialize()函数中。我不想将它们存储为CString,因为它将自己的东西写入其中,我的目标是创建一个文件,我知道其他应用程序的格式并可以在不需要CString的情况下读取它。所以我想将我的std :: strings存储为4个字节(int)的字符串长度,接着是包含字符串的那个大小的缓冲区。我可以重载CArchive <<运算符以使用std :: string吗?
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?总体来说有更好的方法来读/写使用CArchive对象的std :: string吗?
我试过这个,但c_str()返回'const char *',这是一个问题。我可能可以将它转换为简单的'char *',但这会违反c_str()函数。 – zar
因此,“不要这样做”的评论。你可以使用'std :: vector'或者因为你在MFC土地使用'CString' –
AJG85