我正在编写一个需要将数据写入现有缓冲区的子程序,我想使用stringstream该类来简化数据的格式化.
最初,我使用以下代码将流的内容复制到缓冲区,但是希望避免这种解决方案,因为它复制了太多数据.
#include <sstream>
#include <algorithm>
void FillBuffer(char* buffer, unsigned int size)
{
std::stringstream message;
message << "Hello" << std::endl;
message << "World!" << std::endl;
std::string messageText(message.str());
std::copy(messageText.begin(), messageText.end(), buffer);
}
Run Code Online (Sandbox Code Playgroud)
这是我发现streambuf::pubsetbuf()方法的时候,简单地重写上面的代码如下.
#include <sstream>
void FillBuffer(char* buffer, unsigned int size)
{
std::stringstream message;
message.rdbuf()->pubsetbuf(buffer, size);
message << "Hello" << std::endl;
message << "World!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这在Visual Studio 2008附带的C++标准库实现下不起作用; buffer保持不变.
我看了一下它的实现,pubsetbuf结果发现它实际上"什么都不做".
virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
{ // offer buffer to external …Run Code Online (Sandbox Code Playgroud)