Hay una tonelada de información disponible sobre la sobrecarga de operator<<
para imitar un método de estilo toString()
que convierte un objeto complejo en una cadena. Estoy interesado en también implementando el inverso, operator>>
para deserializar una cadena en un objeto.Operador de secuencia de sobrecarga segura >>
Mediante la inspección de la fuente STL
, que he reunido que:
istream &operator>>(istream &, Object &);
sería la firma de la función correcta para deserializar un objeto de tipo Object
. Desafortunadamente, no he encontrado la forma de implementarlo correctamente, específicamente cómo manejar los errores:
- ¿Cómo indicar datos no válidos en la secuencia? Lanzar una excepción?
- ¿En qué estado debe estar la transmisión si es datos mal formados en la secuencia?
- ¿Deben restablecerse los indicadores antes de devolver la referencia para el encadenamiento del operador?
También asegúrese de marcar el bit 'fail' antes de intentar hacer algo. Si ya está configurado, simplemente devuelve la transmisión. – KTC
Gracias por el consejo, especialmente al usar el bit 'fail' en lugar de excepciones. Además de establecer el bit de falla, ¿debo hacer alguna garantía sobre el contenido de la transmisión? Por ejemplo, ¿la transmisión no se modificará si configuro el bit 'fail'? –
Eso es esencialmente lo que iba a decir, ¡pero respondiste más rápido! Añadiría que la respuesta correcta se encuentra buscando qué hacen las implementaciones existentes, que es lo que estás describiendo. Además, señalaría que no existe información mal formada, sino un formato incorrecto para leerla; en ese caso, quiere asegurarse de que la variable no se modifique, y (si establece el bit de falla y no el bit malo) que no se han perdido caracteres de la secuencia. –