【发布时间】:2012-06-05 16:27:47
【问题描述】:
是否可以传入一个字符串流并让函数直接写入它?
我记得我看到一个类似这样的函数调用:
my_func(ss << "text" << hex << 33);
【问题讨论】:
标签: c++ function parameter-passing stringstream
是否可以传入一个字符串流并让函数直接写入它?
我记得我看到一个类似这样的函数调用:
my_func(ss << "text" << hex << 33);
【问题讨论】:
标签: c++ function parameter-passing stringstream
当然。为什么不呢?此类函数的示例声明:
void my_func(std::ostringstream& ss);
【讨论】:
ss << "test" << hex << 33的类型不是std::stringstream&,而是std::ostream&,和给定的签名不匹配。
绝对!确保通过引用而不是值传递它。
void my_func(ostream& stream) {
stream << "Hello!";
}
【讨论】:
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 );
如果你想使用临时的。但这对用户不太友好。
【讨论】:
【讨论】: