【发布时间】:2012-12-23 08:10:45
【问题描述】:
我想将字符串值列表输出到 ostream。
我可以为此声明和实现重载函数:
ostream& operator<< (ostream &out, const list<string> &in);
...然后像这样写
cout << value;
...但是至少有两种可能的方式来转储字符串列表:每行一个字符串或一行中的所有字符串用空格分隔(或者可能是其他分隔符)。
是否可以通过流控制来改变转储函数的行为?
我想写这样的东西:
list<string> lst;
...
cout << print_as_multiline() << lst;
...和:
list<string> lst;
...
cout << print_as_one_line() << set_separator (", ") << lst;
【问题讨论】:
-
为什么不只是
std::copy?std::ostream_iterator可让您控制它们之间的内容。 -
为了提高可读性
-
字符串是空终止的,要打印的as_one_line,需要去掉
\n -
pretty printer 支持自定义分隔符。可能值得一试。
-
IMO,任何实现这种方法的尝试都将过于复杂,更简单的是有两个函数,
print_multi(),print_single(),它接受列表和流,然后简单地遍历并打印它out...代码清晰,意图明确...