使用boost :: iostreams :: array_sink和boost :: array <char,n =“”>

时间:2016-04-11 13:34:49

标签: c++ arrays gcc boost boost-iostreams

示例(在from here下面再现)表明,使用array_sink流,我可以在char数组上获得输出流功能。

#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>
#include <iostream>

using namespace boost::iostreams;

int main()
{
    char buffer[16];
    array_sink sink{buffer};
    stream<array_sink> os{sink};
    os << "Boost" << std::flush;
    std::cout.write(buffer, 5);
}

我需要的是从boost :: array获取array_sink流。 e.g。

...
using namespace boost::iostreams;

boost::array<char, 16384> headerBuf;

array_sink          sink    {headerBuf};
stream<array_sink>  os      {sink};

os << "somedata";

在gcc 4.4.7下编译时,我收到错误:

error: no matching function for call to ‘boost::iostreams::basic_array_sink<char>::basic_array_sink(<brace-enclosed initializer list>)’

我猜测gcc 4.4.7可能不支持初始化列表,虽然一般来说,是否有一种使用boost :: array初始化array_sink的替代方法?

1 个答案:

答案 0 :(得分:1)

http://www.boost.org/doc/libs/1_44_0/libs/iostreams/doc/classes/array.html#array_sink

使用开始/结束或开始/长度ctors。

array_sink          sink    {headerBuf.begin(), headerBuf.size()};