2011-06-13 16 views
10

Actualmente estoy tratando de implementar una subclase de stringbuf para permitir que el almacenamiento intermedio se convierta en tokens para caracteres específicos ('\ n' en mi caso) y emprender una acción si ocurre esta carbonización (volcar el mensaje a un registrador y borrar el búfer después en mi caso). Para lograr este objetivo, superé sputc (para implementar la supervisión de '\ n') y xsputn (para usar sputc de hecho, ya que la implementación de GCC no parece hacer esto de manera predeterminada). Para fines de depuración, dejo que sputc escriba cada carácter que se le pasa a stdout.Diferencias entre std :: endl y ' n' para implementaciones de streambuffer

Ahora bien, esta es mi pregunta: Si utilizo algo como

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

sputc recibe cada personaje, excepto de la '\ n' que debe ser admitido por std :: endl, por lo que la acción que se espera es no hecho porque el '\ n' no se transmite. Si utilizo algo como

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

o incluso

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

todo funciona como se esperaba y mi aplicación sputc obtiene el '\ n' Char.

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

+2

'<< std :: endl' hace, precisamente,' << '\ n' << std :: flush; '. –

+0

Hay formas más fáciles de hacer lo que estás tratando de hacer. Tal vez si hace una pregunta sobre el problema real, puede obtener consejos sobre la mejor manera de resolverlo. –

Respuesta

6

No puede anular sputc porque sputc no es virtual. Necesita sobrecargar overflow y sync y examinar toda la secuencia pendiente para las ocurrencias de \n.

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

+0

Lo descubrí ayer mismo y sobrecargué el desbordamiento como dices, y ahora todo funciona. – crispinus

Cuestiones relacionadas