现在如何弃用相同的strstream功能?

时间:2010-06-08 20:09:55

标签: c++

我用来编写这样的代码:

void fun(char *buff, unsigned size)
{
    std::strstream str(buff, size);
    str << "hello world: " << 5;
}

所以我可以在任意缓冲区上使用流输出。我发现这种技术既有效(无分配)又有用(流!)。既然不推荐使用std :: strstream,我怎样才能获得与此代码相同的速度+灵活性?

3 个答案:

答案 0 :(得分:5)

标准库不提供该功能。但是,Boost使用其通用流和阵列源/接收器。

Boost Generic Stream
Boost Array Devices

char buff[size];
boost::stream<boost::array_sink> out(buff, size);
out << "Hello, world!";

(未经测试的代码)

答案 1 :(得分:2)

尝试:

#include <sstream>
std::stringstream str;
str << "hello world: " << 5;

编辑:对不起,我想我简化了你的问题。该功能是更改为sstream时删除的内容之一。这是类似的东西(我认为这有效......):

#include <sstream>
void fun(char *buff, unsigned size)
{
    std::stringstream str;
    str << "hello world: " << 5;
    memcpy(buff, str.str().c_str(), size);
}

答案 2 :(得分:-1)

  

现在不推荐使用std :: strstream,   我怎么能得到相同的   速度+灵活性,我可以得到   这段代码?

我认为它被弃用是有原因的。在处理流到达缓冲区末尾的流的情况时,我在过去遇到了许多可移植性问题。缺乏统一可能引发了对使用版本的std :: string的弃用。

否则,在iostreams和“&lt;&lt;”的背景下提到“速度”让我感到很高兴。运营商。我在过去做了很多测试,而iostreams根本无法赶上好的'snprintf()。对每个元素进行函数调用 - “&lt;&lt;”的效果运营商 - 无论如何你都在看它,并且总是会变慢。这是严格类型检查的成本。