2012-05-31 65 views

回答

11

当然可以。为什么不呢?举例说明这样的功能:

void my_func(std::ostringstream& ss); 
+0

谢谢你,我错过了什么,我知道这有点可能,但我不知道用什么声明来达到这种效果 – rsk82

+2

除了'ss <<“test”<< hex << 33'的类型不是'std :: stringstream&',但是'std :: ostream&',并且不符合给定的签名。 –

+0

@James Kanze这当然是正确的。 –

7

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

void my_func(ostream& stream) { 
    stream << "Hello!"; 
} 
1

是的,它是和

Function(expresion) 

将表达式先计算和它的结果将作为参数

注传递:Operator << for ostreams返回的ostream

3

my_func必须沿行签名:

void my_func(std::ostream& s); 

,因为这是ss << "text" << hex << 33的类型。如果目标是 提取生成的字符串,you'ld必须做一些事情,如:

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); 

如果你想使用临时。但是这不是很方便用户。

相关问题