25

是否可以传入一个字符串流并让函数直接写入它?

我记得我看到一个类似这样的函数调用:

my_func(ss << "text" << hex << 33);
4

4 回答 4

23

肯定的事。为什么不呢?此类函数的示例声明:

void my_func(std::ostringstream& ss);
于 2012-05-31T12:03:02.840 回答
11

绝对地!确保通过引用而不是值传递它。

void my_func(ostream& stream) {
    stream << "Hello!";
}
于 2012-05-31T12:03:16.507 回答
5

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.

于 2012-05-31T14:39:21.527 回答
1

是的,而且

Function(expresion)

将使表达式首先被评估,其结果将作为参数传递

注意:ostreams 的运算符 <<返回一个 ostream

于 2012-05-31T12:04:10.027 回答