是否可以传入一个字符串流并让函数直接写入它?
我记得我看到一个类似这样的函数调用:
my_func(ss << "text" << hex << 33);
是否可以传入一个字符串流并让函数直接写入它?
我记得我看到一个类似这样的函数调用:
my_func(ss << "text" << hex << 33);
肯定的事。为什么不呢?此类函数的示例声明:
void my_func(std::ostringstream& ss);
绝对地!确保通过引用而不是值传递它。
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 );
won't compile (except maybe with VC++), since it's not legal C++. You could write something like:
my_func( std::ostringstream().flush() << "text" << hex << 33 );
if you wanted to use a temporary. But that's not very user friendly.