Pregunta

Actualmente estoy tratando de implementar una subclase de stringbuf para permitir que el búfer se convierta en token para caracteres específicos ('\ n' en mi caso) y emprender una acción si se produce este carácter (volcar el mensaje a un registrador y borrar el búfer luego en mi caso). Para lograr este objetivo, anulé sputc (para implementar vigilando el '\ n') y xsputn (para usar sputc de hecho, ya que la implementación de GCC no parece hacer esto de forma predeterminada). Para fines de depuración, dejo que sputc escriba cada carácter que se le pasa a stdout.

Esta es mi pregunta: si utilizo algo como

mystream << "Some text" << std::endl;

sputc recibe cada carácter excepto el '\ n' que debería ser inducido por std :: endl, por lo que la acción que se espera no se realiza porque el '\ n' no se transmite. Si uso algo como

mystream << "Some text" << '\n';

o incluso

mystream << "Some text" << "\n" << std::flush;

todo funciona como se esperaba y mi implementación sputc obtiene el carácter '\ n'.

Entonces mi pregunta es: ¿No deberían ambas líneas de código hacer exactamente lo mismo con respecto al stringbuf detrás, y si no, qué otros métodos tengo que anular para obtener el '\ n'?

¿Fue útil?

Solución

No puede anular sputc porque sputc no es virtual.Necesita sobrecargar overflow y sync y examinar toda la secuencia pendiente en busca de apariciones de \n.

No debería necesitar sobrecargar xsputn a menos que pueda hacer algo óptimo porque sabe algo especial sobre el dispositivo que respalda su tipo de transmisión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top