2013-08-15 22 views
13

Stavo cercando il frammento di seguito, ma non sta dando il risultato desiderato:Differenza stringstream e ostringstream

#include<iostream> 
#include<sstream> 
using namespace std; 
void MyPrint(ostream& stream) 
{ 
    cout<<stream.rdbuf()<< endl; 
} 
int main() 
{ 
    stringstream ss; 
    ss<<"hello there"; 
    MyPrint(ss);    //Prints fine 

    ostringstream oss; 
    oss<<"hello there"; 
    MyPrint(oss);    //Does not print anything 
    getchar(); 
} 

Sono consapevole del fatto che le uniche differenze possibili tra stringstream e ostringstream è che le forze più tardi la direzione e è un po 'più veloce di stringstream.

Mi manca qualcosa?

PS: una domanda simile è stata pubblicata in precedenza ma non ha ricevuto alcuna risposta.

risposta

21

std::stringstream e std::ostringstream passare diverse bandiere allo std::stringbuf. In particolare, lo std::stringbuf di std::ostringstream non supporta la lettura di . E std::cout << stream.rdbuf() è un'operazione di lettura sullo streambuf.

Il modo per estrarre i caratteri da un std::ostringstream è da utilizzando la funzione std::ostringstream::str().

0

la stringstream non dovrebbe essere pensata come un'implementazione bidirezionale di ostringstream e istringstream. È implementato come una classe in disuso sia di ostringstream che di istringstream, ed è per questo che implementa sia le capacità di input che di output.

Scegliere quale utilizzare dipende da cosa viene utilizzato. Se hai solo bisogno di scrivere dati su uno stream senza poter accedere ai dati tramite uno stream, un ostringstream è tutto ciò di cui hai bisogno. Tuttavia, se vuoi implementare bidirezionale su qualcosa che fornisci a un'API, ma limitalo, puoi lanciarlo:

Problemi correlati