相关疑难解决方法(0)

设置标准流使用的内部缓冲区(pubsetbuf)

我正在编写一个需要将数据写入现有缓冲区的子程序,我想使用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)

c++ stream visual-c++

24
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×1

stream ×1

visual-c++ ×1