2016-03-27 3 views
2

Ich habe eine std::string line, die eine Textzeile enthält, die aus einer Datei gelesen wird. Ich erstelle dann ein istringstream:Wie liest man ein Wort von std :: istringstream, ohne ihm eine tmp-Variable zuzuweisen?

std::istringstream str(line); 

diese Zeile zu lesen. Um das erste Wort, ich dies tun:

std::string word; 
str >> word; 

Gibt es eine Möglichkeit, das Wort zu erhalten direkt von str, ohne die Zwischenvariable word zu deklarieren?

Zum Beispiel würde Ich mag, wie etwas zu tun ist:

if (str.get_next_word_directly() == "yes") 
    do_something(); 
+1

Was meinst du mit _get direkt_? Wohin soll der Wert gehen? –

+0

Zwischen was? – anukul

+0

@ πάνταῥεῖ Hinzugefügt ein Beispiel. – becko

Antwort

4

Sie haben eine benannte Variable zu verwenden, um dies zu tun; es ist möglich, in ein temporäres zu extrahieren, aber dann haben Sie keine Möglichkeit, das temporäre zu identifizieren, um operator== darauf anzurufen.

Eine Option wäre, die Extraktion in eine Funktion, z.B.

std::string get_word(std::istream& is) 
{ 
    std::string word; 
    is >> word; 
    return word; 
} 

und dann können Sie

if(get_word(str) == "yes") 

NB schreiben. Es gibt einen Vorschlag für C++ 17, der str.get_word() statt get_word(str) erlauben würde; aber jetzt bist du mit get_word(str) fest.

+0

Zuletzt habe ich gehört, Unified Call-Syntax wird es nicht in C++ 17 machen. –

Verwandte Themen