是否可以编写一个接受字符串流并使其看起来像这样的方法,
void method(string str)
void printStringStream( StringStream& ss)
{
method(ss.str());
}
可以这样调用
stringstream var;
printStringStream( var << "Text" << intVar << "More text"<<floatvar);
我查找了 << 运算符,它看起来像返回一个 ostream&
对象,但我可能正在阅读 this
错误或只是没有正确实现。
我真正想要的只是一种干净的方法,可以将内容作为字符串连接在一起并将其传递给函数。我能找到的最干净的东西是一个 stringstream 对象,但仍然有很多不足之处。
注意事项:
我不能使用很多 c++11
答案,因为我在 Visual Studio 2010 上运行(违背我的意愿,但仍然如此)
我可以访问 Boost
,所以用它吧。
我不会反对自定义方法,只要它能解决这个问题。
编辑:
@Mooing Duck 的回答与@PiotrNycz 语法相结合,我实现了编写这样的代码的目标,
try{
//code
}catch(exception e)
{
printStringStream( stringstream() << "An exception has occurred.\n"
<<" Error: " << e.message
<<"\n If this persists please contact "<< contactInfo
<<"\n Sorry for the inconvenience");
}
这是我所希望的那样干净和可读。
希望这可以帮助其他人清理写入的消息。
最佳答案
啊,花了我一分钟。自 operator<<
是为所有 ostream 类型重载的自由函数,它不返回 std::stringstream
, 它返回一个 std::ostream
就像你说的。
void printStringStream(std::ostream& ss)
现在清楚了,一般ostream
我们没有 .str()
成员,但他们确实有一种将整个流复制到另一个流的神奇方法:
std::cout << ss.rdbuf();
这是完整代码的链接,显示它可以正常编译和运行 http://ideone.com/DgL5V
编辑
如果你真的需要函数中的字符串,我可以想到几个解决方案:
首先,单独进行流式传输:
stringstream var;
var << "Text" << intVar << "More text"<<floatvar;
printStringStream(var);
其次:将流复制为字符串(可能的性能问题)
void printStringStream( ostream& t)
{
std::stringstream ss;
ss << t.rdbuf();
method(ss.str());
}
第三:让其他函数也接受流
关于C++ 在 << 作为参数后使用 stringstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12519829/