Подтвердить что ты не робот

Какие серьезные альтернативы существуют для библиотеки IOStream? (кроме cstdio)

Я ищу библиотеку, которая работает подобно iostreams, поскольку она выполняет преобразования и позволяет записывать в буферы, файлы и консоль памяти. Тем не менее, я бы хотел, чтобы что-то типа было безопасным, как iostream. Есть ли серьезные библиотеки, которые это делают?

Возможность указать выходную кодировку для вещей будет плюсом.

Обратите внимание, что меня не интересуют библиотеки, которые просто фронт iostreams, потому что они просто добавляют больше сложности тому, что делает iostreams, например. boost::format.

Ответ на предварительный комментарий: я не хочу использовать cstdio, потому что, используя эту систему, невозможно, чтобы код выводил местоположение агностик. То есть вы должны вызвать одну функцию для отправки вещей в буферы, и вам нужно вызвать другую функцию для отправки файлов в файлы, а другую для консоли и т.д.

EDIT2: В ответ на шквал комментариев ниже: мне надоело как iostreams, так и cstdio. Вот более конкретные причины. Я пытался удержать свое "разглагольствование" от этого вопроса, но люди все время спрашивают меня, не покидаю ли я свой рокер, так что вот здесь мое обоснование.

cstdio

  • Невозможно правильно обрабатывать символы Unicode.
  • Невозможно записать что-то вроде строки без ручного управления буфером.
  • Часто требуется поддержка нестандартных расширений (например, vsnprintf) для использования (EDIT: Хорошо, стандартная библиотека C99, находящаяся в С++ 11, добавляет большинство/все из них сейчас)
  • Невозможно изменить местоположение вывода без изменения исходного кода (нестандартные расширения, например, в glibc, позволяют обрабатывать указатель на файл в виде буфера, какой из них делает это... но это все еще только это, нестандартное расширение )
  • Обеспечивает безопасность "весело" (до тех пор, пока целые главы выделены в документах безопасности, объясняющих проблемы, например, с строками формата "printf" и т.д.)
  • Не безопасный тип

iostreams

  • Низкая
  • Весьма сложный для клиента. Если вы используете только то, что поставляется со стандартной библиотекой, это здорово, но попытка расширить вещи практически невозможна. Я прочитал всю книгу "Standard С++ IOStreams and Locales" - единственная книга, которая, по-видимому, доступна по этой теме - дважды, и я до сих пор не знаю, что происходит.

Мне нравится iostreams в концепции, даже использование operator<<, которое некоторым людям кажется не нравится, но, похоже, оно слишком переработано для меня. Кому-то не нужно тратить бесчисленные часы на чтение книг, чтобы быть простым клиентом вашей библиотеки. Конечно, если вы добавляете новый источник вывода или что-то подобное, я мог бы понять, но... клиенты должны быть защищены от этой сложности. (Разве это не библиотека для?)

Это единственное, что болезненно в С++, которое "просто работает" на других языках программирования, что я не вижу причин для сложностей.

4b9b3361

Ответ 1

Boost. Spirit Qi для ввода, Boost Spirit. Karma для вывода, Может читать/записывать все, что может быть представлено как диапазон итераторов.

Ответ 2

Вам может быть интересна Fast Format библиотека. Вы можете увидеть сравнение на своем сайте с другими другими библиотеками.