3 回答
TA贡献1848条经验 获得超10个赞
在对这个问题进行了一些研究,并仔细审查了我的代码后,我发现了一个帖子,建议使用手工编写的std::streambuf类。这段代码背后的想法是创建一个streambuf初始化其内部结构以引用给定的缓冲区。代码如下。
#include <streambuf>
template <typename char_type>
struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type> >
{
ostreambuf(char_type* buffer, std::streamsize bufferLength)
{
// set the "put" pointer the start of the buffer and record it's length.
setp(buffer, buffer + bufferLength);
}
};
现在,如果您查看我的原始代码,您会注意到我并不需要stringstream开头。我真正需要的只是一种使用IOStream库写入外部缓冲区的方法,并且std::ostream是解决此问题的更好的类型。顺便说一句,我怀疑这是怎么了array_sink从类型了Boost.Iostreams实现。
这是使用我的ostreambuf类型的修改代码。
#include <ostream>
#include "ostreambuf.h" // file including ostreambuf struct from above.
void FillBuffer(char* buffer, unsigned int size)
{
ostreambuf<char> ostreamBuffer(buffer, size);
std::ostream messageStream(&ostreamBuffer);
messageStream << "Hello" << std::endl;
messageStream << "World!" << std::endl;
}
- 3 回答
- 0 关注
- 981 浏览
添加回答
举报