2013-08-15 11 views
13

starałem poniższy fragment, ale to nie daje pożądany wynik:Różnica stringstream i 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(); 
} 

jestem świadomy, że jedynym możliwym różnice między stringstream i ostringstream jest to, że później siły kierunku i jest nieco szybszy niż stringstream.

jestem brakuje na coś?

PS: Podobne pytanie zostało wysłane wcześniej, ale nie otrzymałem żadnych odpowiedzi.

Odpowiedz

21

std::stringstream i std::ostringstream przekazać różne flagi do std::stringbuf. W szczególności, std::stringbuf o std::ostringstream nie obsługuje czytania. I std::cout << stream.rdbuf() jest operacją odczytu na streambuf.

Sposób na wyodrębnienie znaków z std::ostringstream następuje przez przy użyciu funkcji std::ostringstream::str().

0

Ciąg nie powinien być uważany za dwukierunkową implementację ostringstream i istringstream. Jest on implementowany jako klasa pochodna zarówno ostringstream, jak i istringstream, dlatego implementuje zarówno możliwości wejścia, jak i wyjścia.

Wybór, który z nich korzystać zależy od tego co się go stosuje. Jeśli potrzebujesz tylko zapisywać dane w strumieniu, nie mając dostępu do danych przez strumień, to wszystko, czego potrzebujesz, to ostringstream. Jeśli jednak chcesz zaimplementować dwukierunkową operację na podanym przez Ciebie interfejsie API, ale go ograniczyć, możesz go przesłać:

stringstream ss; // My bidirectional stream 

ostringstream *p_os = &ss; // Now an output stream to be passed to something only allowed to write to it. 

int bytes = collectSomeData(p_oss); 
Powiązane problemy