Frage

Ich habe mehrere Fragen über die Frage der Bäche und Sachen hat, aber ein wenig nach denken, ich bin zu dem Schluss gekommen, dass alles was ich brauche ein benutzerdefinierte Flush-Typ ist. Ich möchte meinen Strom zu spülen, wenn es eine neue Linie bekommt. Es erspart std :: endl tippen. Ist es möglich, dies zu implementieren? Ich verwende eine Ostream mit einem benutzerdefinierten stringbuf.

War es hilfreich?

Lösung

Ich glaube, dass alle es dauern würde, ist zwingende ostream::put(char), aber zitieren Sie mich nicht auf diese:

template <typename Ch>
class autoflush_ostream : public basic_ostream<Ch> {
public:
    typedef basic_ostream<Ch> Base;
    autoflush_ostream& put(Ch c);
};

template <typename Ch>
autoflush_ostream<Ch>& autoflush_ostream<Ch>::put(Ch c) {
    Base::put(c);
    if (c == "\n") {
        flush();
    }
    return *this;
}

Sie müssen unter Umständen jede Methode und Funktion außer Kraft setzen, die ein Zeichen oder eine Folge von Zeichen nehmen, die in der STL definiert sind. Sie würden alle im Grunde das gleiche tun. Rufen Sie die Methode / Funktion auf der Superklasse definiert ist, zu überprüfen, ob ein Newline wurde gerade gedruckt und bündig, wenn so

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top