Les différences entre les std :: endl et '\ n' pour les implémentations de streambuffer

StackOverflow https://stackoverflow.com/questions/6331282

  •  27-10-2019
  •  | 
  •  

Question

Je tente actuellement de mettre en œuvre une sous-classe de StringBuffer pour permettre le tampon de tokenize pour carbonise spécifiques ( « \ n » dans mon cas) et d'entreprendre une action si ce ombles se produit (vider le message à un enregistreur et un tampon clair après dans mon cas). Pour atteindre cet objectif, je sputc l'emportait sur (à mettre en œuvre pour le regarder « \ n ») et xsputn (à l'utilisation sputc En effet, comme la mise en œuvre du CCG ne semble pas le faire par défaut). Pour le débogage, je laisse sputc écrire chaque caractère qui lui est passé à stdout.

Maintenant, ma question est: Si j'utiliser quelque chose comme

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

sputc reçoit chaque caractère sauf du « \ n », qui devrait être intronisé par std :: endl, de sorte que l'action qui devrait ne se fait pas parce que le « \ n » est pas transmis. Si j'utilise quelque chose comme

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

ou même

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

tout fonctionne comme prévu et ma mise en œuvre sputc obtient le '\ n' omble chevalier.

Alors ma question est: Faut-il pas les deux lignes de code font exactement la même chose en ce qui concerne le derrière de StringBuffer, et sinon, que d'autres méthodes dois-je remplacer pour obtenir le « \ n »

?
Était-ce utile?

La solution

Vous ne pouvez pas passer outre sputc parce sputc n'est pas virtuel. Vous devez surcharge overflow et sync et d'examiner toute la séquence en attente pour les occurrences de \n.

Vous ne devriez pas vraiment besoin d'une surcharge xsputn à moins que vous pouvez faire quelque chose optimale parce que vous savez quelque chose de spécial à propos de l'appareil qui sauvegarde le type de flux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top