是否存在std :: ostream的"unput",就像std :: istream存在"unget"一样?

Wil*_*ill 3 c++ iostream

我有一些解析代码,允许将转义序列输入到一串文本中:

// In a file or large, multi-line string ...
my_parameter="A setting for the parameter\nthat contains \"escape sequence\" characters"
Run Code Online (Sandbox Code Playgroud)

当我解析它时,我处理反斜杠并将相应的字符添加到我使用std::ostringstream实例构建的字符串中.换行,引号,反斜杠等都可以正常工作.然而,我正在考虑是否允许这个\b序列,然后去看看我是否可以"输出"我的最后一个角色,ostringstream你可以"取消"任何一个std::istream.你能做这样的事吗?如果该函数不存在,是否有一种简单的方法将写入位置推回一个字符并简单地让下一个字符读取覆盖它?

这不是关键任务或类似的事情,但我很好奇其他人是否曾经遇到过这个问题.

Sin*_*ion 9

Streams非常像邮件.在流上发送的每条消息都像一个字母,消息可以排队到缓冲区,就像邮箱一样.

如果你负责将邮件放入邮箱并从邮箱中取出邮件,那么你当然可以知道你刚刚放在那里的一封信仍然可以收回.当然,你可能根本不会把它放在邮箱里,因为你拥有两端.

相反,如果你在你的女朋友邮箱里写了一封信,你真的无法控制她什么时候检查她的邮箱并取出所有的信件.可能是她正坐在门边,一旦它通过插槽,就会立即抓住这封信并将其读出来.

更有可能的是,您实际上是将信件发送到邮局(操作系统)所拥有的信箱.虽然许多这样的容器只是垃圾箱,邮件承运人每天检查一次,但是可能是插槽直接连接到分拣机,并且即使您放下它也会发送信件.

在具有并发性的流式接口中,没有通用的方法来重写一次写入的所有权.如果需要,您应该在您和流之间放置一个中间缓冲区,并且只有在您确定已准备就绪时才将其刷新到流中.