我有很多日志记录功能,现在可以接受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
(由于某种原因,这实际上可以与 a 一起使用)
第二种形式必须有效,因为这是我的遗留代码的编写方式。
此外,如果我可以避免像stringstream().flush()
我喜欢一个解决方案那样写一些不雅的东西,那么如果你这样做,该线程中的每个解决方案都有效
wrapper() << "string"
但如果你这样做不会编译
wrapper() << "string" << endl
编辑:澄清了我不能破坏的旧原型。