1

std::ostream_iterator配列デバイス ベースのストリームと wantet を使用してストリームをorに渡そうとしましたstd::istream_iteratorが、残念ながら gcc 4.3.5 でコンパイル エラーが発生します。

Boost::IOStreams のドキュメントには、が基になるデバイス カテゴリに依存するか、またはその両方 ( )から派生io::streamしていると記載されています。配列 device にはシーク可能なカテゴリがあるため、 io::stream がorから派生し、互換性があることを期待しています。しかし、残念ながらコンパイルエラーが発生します。std::basic_istreamstd::basic_ostreamstd::basic_iostreamstd::basic_iostreamstd::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&)'
4

1 に答える 1

3

十分なテンプレート引数を指定していませんstd::istream_iterator-- 2 番目の引数は、ストリームの基になる文字型で、デフォルトは ですが、ストリームcharの基になる文字型はbyte( unsigned char) です。

変化

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

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

動作するはずです。

于 2011-07-18T22:21:30.110 に答える