我在我的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