我知道各种各样的ostream都有自己的内部缓冲区。
我必须知道是否存在某种接受实例std::string并在该实例上写入内容的ostream。

(我要避免多余的副本)

注意:我的问题是关于标准库的,请不要向我提供其他可以做到这一点的库,我知道它们存在。 :)

编辑:在请求更具体之后...这是我想要的,请考虑以下代码:

std::string str = "bla bla bla ";
std::ospecialstream o(str);
o << 34 << " bla bla";
std::cout << str; //console output : "bla bla bla 34 bla bla"

我希望ospecialstream不会将str内容复制到某个内部缓冲区中,而是写入同一个str实例。

编辑#2
由于性能原因,我需要它,当使用字符串创建时,ostringstream将创建一个内存拷贝,而在检索内容时也将创建一个memcpy。

最佳答案

如果您询问是否可以更改ostream的缓冲,那么答案是肯定的。但是,根据您实际上希望缓冲区执行的操作,这并不是一个特别简单的任务。您将需要引用Langer & Kreft之类的书以了解更多信息。

L&K有一个有关如何实现无缓冲输出流的示例-从书的第229页开始。在这里复制太长,但是基本上您需要重新定义派生的streambuf类的overflow()方法。

请注意,该书无法在线获得,但源代码显然是-有关详细信息,请参见page

关于c++ - 有没有一种方法可以使用 “ostream”覆盖现有std::string实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/746735/

10-14 19:44