在std :: ostream_iterator中使用boost IOStreams

时间:2011-07-16 11:27:59

标签: c++ boost boost-iostreams istream-iterator

我尝试使用基于数组设备的流并想要将流传递给std::ostream_iteratorstd::istream_iterator,但不幸的是,我收到了gcc 4.3.5的编译错误。

Boost :: IOStreams文档指出io::stream源自std::basic_istreamstd::basic_ostream或两者(std::basic_iostream),取决于底层设备类别。数组设备具有可搜索类别,因此我希望io :: stream派生自std::basic_iostream并与std::ostream_iteratorstd::istream_iterator兼容。但遗憾的是我收到了编译错误。

以下是代码段:

namespace io=boost::io;

typedef unsigned char byte;
typedef io::basic_array<byte>  array_device;
typedef io::stream<array_device> array_stream;

byte my_buffer[256]={};

array_stream  ios_(my_buffer); 

std::istream_iterator<byte> in(ios_);

最后一行会导致错误说明:

src/my_file.cpp: In member function 'void my_test_class::ctor::test_method()':
src/my_file.cpp:86: error: no matching function for call to 
'std::istream_iterator<unsigned char, char, std::char_traits<char>, int>::istream_iterator(my_test_class::<unnamed>::array_stream&)'

1 个答案:

答案 0 :(得分:3)

您没有为std::istream_iterator提供足够的模板参数 - 第二个参数是流的基础字符类型,默认为char,但您的流的基础字符类型为{ {1}}(byte)。

更改

unsigned char

std::istream_iterator<byte> in(ios_);

应该有用。