Я хотел бы показывать потоки в моем коде как их стандартные эквиваленты, чтобы исключить зависимость пользователя от boost::iostreams
. Хотелось бы сделать это эффективно, конечно, не создавая при необходимости копию. Я подумал о том, чтобы установить буфер std::istream
в тот, который используется boost::iostream::stream<boost::iostreams::source>
, однако это может привести к проблемам с владельцем. Как вы преобразовываете boost::iostream
в std::iostream
эквивалент? В частности, boost::iostream::stream<boost::iostreams::source>
- std::istream
.convert boost :: iostream :: stream <boost :: iostreams :: source> to std :: istream
1
A
ответ
2
Никакого преобразования не требуется:
#include <iostream>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/device/array.hpp>
namespace io = boost::iostreams;
void foo(std::istream& is) {
std::string line;
while (getline(is, line)) {
std::cout << " * '" << line << "'\n";
}
}
int main() {
char buf[] = "hello world\nbye world";
io::array_source source(buf, strlen(buf));
io::stream<io::array_source> is(source);
foo(is);
}
Кроме того, я не думаю, что вы могли бы иметь проблемы собственности, поскольку std::istream
не берет на себя право собственности при присвоении нового rdbuf:
Таким образом, вы также можете свободно делать:
std::istream wrap(is.rdbuf());
foo(wrap);
Печать же
Смежные вопросы
- 1. Использование boost :: iostreams :: tee_device?
- 2. Использование настраиваемого источника boost :: iostreams :: stream
- 3. Seek не работает на std :: istream инициализирован с boost filtering_istreambuf
- 4. Boost :: knuth_morris_pratt over std :: istream
- 5. gnuplot-iostream не связывается с boost
- 6. boost :: iostreams управляет ресурсами
- 7. Каков тип базового потока boost :: iostreams :: filtering_stream?
- 8. boost :: python convert std :: array
- 9. Pipes boost :: iostreams не имеет никакого вывода
- 10. с использованием boost :: iostreams :: array_sink с boost :: array <char, n>
- 11. Convert boost :: uuid to char *
- 12. Сбой при использовании boost :: iostreams
- 13. C++ 11 boost :: iostreams :: filtering_stream delete
- 14. boost iostreams: output_filter работает только один раз
- 15. boost :: iostreams чтение с исходного устройства
- 16. writing boost :: archive to C# stream
- 17. ошибка компиляции на boost :: iostreams :: copy
- 18. boost :: iostreams :: counter, похоже, не работает
- 19. Boost - ASIO vs. IOStreams TCP
- 20. Как использовать boost :: iostreams :: mapped_file_source с вложенным файлом gzipped
- 21. Boost :: Asio :: Ip :: Tcp :: Iostream вопросы
- 22. convert dynamic_bitset to std :: bitset
- 23. Пример Boost IOStream для создания zip-файла?
- 24. boost :: iostream zlib сжимает несколько файлов в один архив
- 25. Iterate std :: list <boost :: variant>
- 26. C++ convert boost :: optional <double> to double
- 27. boost :: iostreams :: zlib :: default_noheader кажется проигнорированным
- 28. gil boost: convert rgb8_image_t to rgba8_image_t
- 29. Convert Boost Gregorian Date to POD
- 30. IStream из file_descriptor_source (повышение :: iostreams) или файл