我用来编写这样的代码:
void fun(char *buff, unsigned size)
{
std::strstream str(buff, size);
str << "hello world: " << 5;
}
所以我可以在任意缓冲区上使用流输出。我发现这种技术既有效(无分配)又有用(流!)。既然不推荐使用std :: strstream,我怎样才能获得与此代码相同的速度+灵活性?
答案 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;”的效果运营商 - 无论如何你都在看它,并且总是会变慢。这是严格类型检查的成本。