Должен ли я предоставить ostream << операторы для типов в библиотеке? - PullRequest
4 голосов
/ 27 февраля 2020

Я работаю над библиотекой оболочки C ++ для некоторого API. Предположим, я реализовал некоторую структуру или тип класса Foo. Я не могу решить, предоставлять ли ostream& operator<<(ostream& os, const Foo& x) моей библиотеке.

С одной стороны:

  • Это удобно для отладки.
  • Это не мешает остальной части кода.
  • Я не ожидаю, что Foo s будет напечатано, за исключением случаев отладки, поэтому это не должно распространяться на sh с пользователями, желающими сериализоваться Foo s к файлам или подобным действиям.

С другой стороны:

  • В этом нет необходимости, т. Е. Функциональность упаковщиков не требует его ни для чего.
  • Пользователи библиотеки могут захотеть использовать другой формат отладочной печати, отличный от того, что я пишу. Или, может быть, они используют темную автоматизацию вуду Энтони Полухина c struct printing ( magic_get ).
  • Если пользователь тщательно не отделен от остального кода, он заставляет пользователя библиотеки включать <iostreams> , что не является тривиальной вещью.

Игнорирует ли какое-то другое первичное рассмотрение любого из вариантов? Или, если выразиться иначе: каков будет подходящий критерий для включения таких операторов в библиотеку?

Дополнительная информация:

  • Все члены Foo могут быть получены пользователь, поэтому им не требуется функция члена или друга для достижения того же эффекта.
...