使c ++类"显示"的最佳实践(字符串,ostream)

Sti*_*ert 7 c++ c++11 c++14

我有一个值语义类,我希望在与Haskells Show类相同的意义上"可显示" ,或者Python提供通用__str__()函数.

在c ++中:

  • 我可以重载,operator<<(ostream&, ...)所以我可以输出我的类,例如cout
  • 我可以重载,operator std::string()所以我的类转换为std :: string
  • 我可以重载,operator const char*()所以我的类转换为const char*.
  • 我可以写一个str()成员,或一个to_string(...)免费的功能

这些功能中的每一个都可以根据另一个来定义.一种选择比其他选择更好吗?这些都是选择吗?鉴于c ++ 11/14/17,最优雅的方法是什么?

Ser*_*eyA 8

这个问题将在几分钟内搁置,但我仍然会在这里分享我的想法.

首先,我们可以从列表中删除const char*/std :: string()运算符重载.如果类不是字符串,则它不应该可转换为字符串,并且序列化启用不会使您的类成为字符串.

至于str(),to_stringoperator <<他们漂亮的等价物.但是,因为对于任何复杂的类,to_string()和str()很可能在内部使用ostreams,我相信,这operator <<是最好的选择.