質問

ストリームなどの問題について複数の質問がありましたが、少し考えた後、必要なのはカスタムフラッシュタイプだけだという結論に達しました。新しいラインが得られたら、ストリームを洗い流したいです。 std :: endlを入力する必要があると節約します。これを実装することは可能ですか?カスタムStringBufを備えたOstreamを使用しています。

役に立ちましたか?

解決

私はそれが必要なのはオーバーライドだけだと思います ostream::put(char), 、しかし、それについて私を引用しないでください:

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;
}

STLで定義されている文字またはシーケンスを取得するすべての方法と関数をオーバーライドする必要がある場合があります。それらはすべて基本的に同じことをします。スーパークラスで定義された方法/関数を呼び出し、新しいラインが印刷されているかどうかを確認し、その場合はフラッシュします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top