【发布时间】:2016-12-19 12:42:12
【问题描述】:
在工作中,我们不得不将 iostream 替换为 void output(std::string) 函数:
std::cout << "This is some output." << '\n';
<--Old--
--New-->
output("This is some output");
当然,我有很多代码将字符串和 int 组合在一起,并且我已经找到了解决此问题的一种可能方法:
int some_value = 5
std::cout << "Some value: " << some_value << '\n';
<--Old--
--New-->
int some_value = 5;
std::stringstream tmp_stream;
tmp_stream << "Some value: " << some_value << '\n';
output(tmp_stream.str());
但我不太喜欢这个解决方案,因为它引入了两行额外的代码和一个额外的一次性使用变量。你知道其他更优雅的解决方案吗?
【问题讨论】:
-
麻烦。我正在建议 OP 编写一个
output_stream类,它将输出发送到函数output。要么通过streambuf 正确完成,要么只编写一个包含operator <<的类。这样他们只需将std::cout更改为g_output。无法写出该答案,因为该问题已作为重复问题关闭。 -
感谢您的回复!
-
@johannesmik 比链接副本更通用的版本或此处的答案是创建可变参数函数模板,例如参见ideone.com/eVjnbv(注释块适用于 c++17)。这样您只需将
std::cout << a << b << c;转换为to_output(a, b, c);。