Estoy usando std :: string en mi aplicación MFC y quiero almacenarlo en la función Serialize() del documento. No quiero almacenarlos como CString porque escribe sus propias cosas allí y mi objetivo es crear un archivo que conozca el formato y pueda ser leído por otra aplicación sin necesidad de CString. Así que me gustaría almacenar mis std :: cadenas como una longitud de cadena de 4 bytes (int) seguida por un buffer de ese tamaño que contiene la cadena.¿Puedo sobrecargar el operador CArchive << para trabajar con 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;
}
}
El código anterior no es excelente y tengo que asignar una temperatura bfr para leer la cadena. Primero, ¿puedo leer la cadena directamente en std :: string sin el buffer temporal? En segundo lugar, ¿puedo sobrecargar el buffer < < para std :: string/CArchive entonces puedo simplemente usar ar < < theString? En general, ¿hay una mejor manera de leer/escribir std :: string utilizando el objeto CArchive?
He intentado esto pero c_str() devuelve un 'const char *' y eso es un problema. Probablemente podría encasillarlo para simplemente 'char *' pero eso violaría algo la función c_str(). – zar
Por lo tanto, el comentario "no hagas esto". Puede usar un 'std :: vector' o dado que está en el uso de la tierra MFC 'CString' –
AJG85