Я работаю над библиотекой оболочки C ++ для некоторого API. Предположим, я реализовал некоторую структуру или тип класса Foo
. Я не могу решить, предоставлять ли ostream& operator<<(ostream& os, const Foo& x)
моей библиотеке.
С одной стороны:
- Это удобно для отладки.
- Это не мешает остальной части кода.
- Я не ожидаю, что
Foo
s будет напечатано, за исключением случаев отладки, поэтому это не должно распространяться на sh с пользователями, желающими сериализоваться Foo
s к файлам или подобным действиям.
С другой стороны:
- В этом нет необходимости, т. Е. Функциональность упаковщиков не требует его ни для чего.
- Пользователи библиотеки могут захотеть использовать другой формат отладочной печати, отличный от того, что я пишу. Или, может быть, они используют темную автоматизацию вуду Энтони Полухина c struct printing ( magic_get ).
- Если пользователь тщательно не отделен от остального кода, он заставляет пользователя библиотеки включать
<iostreams>
, что не является тривиальной вещью.
Игнорирует ли какое-то другое первичное рассмотрение любого из вариантов? Или, если выразиться иначе: каков будет подходящий критерий для включения таких операторов в библиотеку?
Дополнительная информация:
- Все члены
Foo
могут быть получены пользователь, поэтому им не требуется функция члена или друга для достижения того же эффекта.