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

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

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

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

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

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

cstdio

  • Не могу правильно обрабатывать символы Unicode
  • Может ' t записывать что-то вроде строки без ручного управления буфером
  • Часто требуется поддержка нестандартных расширений (например, vsnprintf ), чтобы его можно было использовать (РЕДАКТИРОВАТЬ: Хорошо, стандартная библиотека C99, находящаяся на C ++ 11, теперь добавляет большинство / все из них)
  • Невозможно изменить расположение вывода без изменения оригинала код (нестандартные расширения, например, в glibc, позволяют обрабатывать указатель файла как буфер, что и делает это ... но это все равно нестандартное расширение)
  • Повышает безопасность (до такой степени, что все главы посвящены документации по безопасности, объясняющей проблемы, например, со строками формата printf и т.п.)
  • Небезопасный тип

iostreams

  • Медленный
  • Слишком сложно для клиента. Если вы используете только то, что поставляется со стандартной библиотекой, это здорово, но попытаться расширить что-то практически невозможно. Я прочитал все "Стандартные потоки и локали IOS C ++" книга - единственная книга, которая, по-видимому, доступна по этой теме - дважды - и я до сих пор не знаю, что происходит.

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

Это единственная неприятная вещь в C ++, которая «просто работает» на других языках программирования, и я не вижу причин для усложнения.

46
задан Billy ONeal 10 December 2012 в 18:44
поделиться