我正在编写一个需要将数据写入现有缓冲区的子程序,我想使用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);
}
这是我发现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;
}
不幸的是,这在Visual Studio 2008附带的C ++标准库实现下不起作用; buffer保持不变。
我看了一下它的实现,pubsetbuf结果发现它实际上“什么都不做”。
virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
{ // offer buffer to external agent (do nothing)
return (this);
}
这似乎是给定C ++标准库实现的限制。配置流以将其内容写入给定缓冲区的推荐方法是什么?
慕桂英546537
相关分类