Wie erzwingen std :: stringstream operator >>, um eine ganze Zeichenfolge zu lesen, anstatt bei den ersten Leerzeichen zu stoppen?Wie erzwinge ich std :: stringstream operator >> um eine ganze Zeichenfolge zu lesen?
Ich habe ein Template-Klasse bekam, die einen Wert aus einer Textdatei lesen speichert:
template <typename T>
class ValueContainer
{
protected:
T m_value;
public:
/* ... */
virtual void fromString(std::string & str)
{
std::stringstream ss;
ss << str;
ss >> m_value;
}
/* ... */
};
I Scharf-/Unscharfschaltung Strom Flaggen versucht haben, aber es hat nicht geholfen.
Klärungs
Die Klasse ist eine Container-Vorlage mit automatischer Umwandlung zu/von Typ T. Strings ist nur eine Instanz der Vorlage, es muss auch als auch andere Typen unterstützen. Deshalb möchte ich Operator >> zwingen, das Verhalten von std :: getline nachzuahmen.
Ich bin nicht klar, was das Problem ist. Wenn Sie '>>' mit der Klasse 'T' arbeiten wollen, müssen Sie' >> 'wie folgt überschreiben: ' stringstream & operator >> (T & receiver) '. Innerhalb dieser Funktion haben Sie Zugriff auf den 'stringstream' (über' this') und auf 'receiver' und Sie können aus '* this' beliebig viele Daten ausmisten. Können Sie das Problem bitte deutlicher erklären? – Ari
Tut mir leid, es ist natürlich "stringstream & operator" (stringstream & ss, T & receiver) ', und Sie greifen' ss' direkt zu. – Ari