Использование надстройки IOStreams с std :: ostream_iterator - PullRequest
1 голос
/ 16 июля 2011

Я пытался использовать поток на основе массива и хотел передать поток на std::ostream_iterator или std::istream_iterator, но, к сожалению, я получаю ошибку компиляции с gcc 4.3.5.

Документация

Boost :: IOStreams гласит, что io::stream является либо производным от std::basic_istream или std::basic_ostream, либо от обоих (std::basic_iostream) в зависимости от базовой категории устройства. Устройство массива имеет категорию для поиска, поэтому я ожидаю, что io :: stream будет производным от std::basic_iostream и будет совместимо с std::ostream_iterator или std::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 Ответ

3 голосов
/ 19 июля 2011

Вы не предоставляете достаточно аргументов шаблона для std::istream_iterator - вторым аргументом является базовый тип символа потока, который по умолчанию равен char, но базовый тип символа вашего потока byte (unsigned char).

Изменение

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

до

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

должно работать.

...