ストリームなどの問題について複数の質問がありましたが、少し考えた後、必要なのはカスタム フラッシュ タイプだけであるという結論に達しました。新しい行を取得したときにストリームをフラッシュしたい。std::endl と入力する手間が省けます。これを実装することは可能ですか?カスタム stringbuf で ostream を使用しています。
質問する
388 次
1 に答える
1
I believe all it would take is overriding ostream::put(char)
, but don't quote me on that:
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;
}
You might have to override every method and function that takes a character or sequence of characters that's defined in the STL. They would all basically do the same thing: call the method/function defined on the super class, check if a newline was just printed and flush if so.
于 2010-12-11T17:04:15.447 に答える