是否可以编写一个接受字符串流的方法并使其看起来像这样, 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/
10-13 06:25