【发布时间】:2013-08-15 07:44:25
【问题描述】:
我有很多日志功能,现在接受ostringstream&。我的目标是让他们能够接受用一行编写的流,如下所示:
MyPrint( ostringstream() << "hello!" << endl);
我无法大幅更改方法原型,因为我有很多仍然可以工作的遗留代码。我想把它改成ostream&,因为那是<<的返回值类型。现在原型的形式是:
void MyPrint( <some parameters>, ostringstream& stream)
阅读此处c++ stringstream to ostream to string 后我建议的更改是(让我们忽略其他参数):
void MyPrint(ostream& stream)
{
stringstream ss;
ss << stream.rdbuf();
cout << "ss is:" << ss.str() << endl;
}
以下行有效:
MyPrint(stringstream().flush() << "hello world!" << endl);
但这会打印一个空白:
ostringstream oss;
oss << "hello world!" << endl;
MyPrint(oss);
(由于某种原因,这实际上可以与 stringstream 一起使用)
第二种形式必须有效,因为这是我的遗留代码的编写方式。
另外,如果我可以避免写像stringstream().flush() 这样不雅的东西,我会喜欢一个解决方案,如果你这样做,该线程中的每个解决方案都可以工作
wrapper() << "string"
但如果你编译则不会编译
wrapper() << "string" << endl
编辑:澄清了我不能破坏的旧原型。
【问题讨论】:
标签: c++ string stl ostream ostringstream