是否可以将字符串流作为函数参数传递?
Posted
技术标签:
【中文标题】是否可以将字符串流作为函数参数传递?【英文标题】:Is it possible to pass a stringstream as a function parameter? 【发布时间】:2012-06-05 16:27:47 【问题描述】:是否可以传入一个字符串流并让函数直接写入它?
我记得我看到一个类似这样的函数调用:
my_func(ss << "text" << hex << 33);
【问题讨论】:
【参考方案1】:当然。为什么不呢?此类函数的示例声明:
void my_func(std::ostringstream& ss);
【讨论】:
谢谢你,我错过了什么,我知道这是有可能的,但我不知道使用什么声明来达到那个效果 除了ss << "test" << hex << 33
的类型不是std::stringstream&
,而是std::ostream&
,和给定的签名不匹配。【参考方案2】:
绝对!确保通过引用而不是值传递它。
void my_func(ostream& stream)
stream << "Hello!";
【讨论】:
为什么只能通过引用传递? @aderchox 否则它不会编译(流没有复制构造函数)。【参考方案3】:my_func
必须有如下签名:
void my_func( std::ostream& s );
,因为那是ss << "text" << hex << 33
的类型。如果目标是
要提取生成的字符串,您必须执行以下操作:
void
my_func( std::ostream& s )
std::string data = dynamic_cast<std::ostringstream&>(s).str();
// ...
还要注意,您不能使用临时流;
my_func( std::ostringstream() << "text" << hex << 33 );
不会编译(可能使用 VC++ 除外),因为它不是合法的 C++。你 可以这样写:
my_func( std::ostringstream().flush() << "text" << hex << 33 );
如果你想使用临时的。但这对用户不太友好。
【讨论】:
【参考方案4】:是的,而且
Function(expresion)
将首先计算表达式并将其结果作为参数传递
注意:Operator << for ostreams 返回一个 ostream
【讨论】:
以上是关于是否可以将字符串流作为函数参数传递?的主要内容,如果未能解决你的问题,请参考以下文章