我应该为库中的类型提供 ostream << 运算符吗?

ein*_*ica 5 c++ iostream idioms libraries debug-print

我正在为一些 API 开发 C++ 包装库。假设我已经实现了一些 struct 或 class type Foo。我无法决定是否提供ostream& operator<<(ostream& os, const Foo& x)我的图书馆。

一方面:

  • 方便调试。
  • 它不会干扰代码的其余部分。
  • 我不希望Foo在调试时打印 s ,因此这不应该与想要将Foos 序列化到文件或类似活动的用户发生冲突。

另一方面:

  • 这是没有必要的,即包装器的功能不需要它来做任何事情。
  • 库用户可能需要其他一些与我编写的不同的调试打印格式。或者他们可能使用 Antony Polukhin 的黑暗巫毒自动结构打印(magic_get)。
  • 除非小心地与其余代码分开,否则它会迫使库用户包含<iostreams>,这不是一件小事。

是否忽略了任何选项的其他一些主要考虑?或者,换句话来说:将此类运算符纳入库的适当标准是什么?

附加信息:

  • 所有的Foos会员都可以由用户获得,因此不需要会员或好友功能来达到同样的效果。