2012-05-31 79 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); 

如果你想使用臨時。但是這不是很方便用戶。

相關問題