自定义流刷新类型

时间:2010-12-11 16:33:42

标签: c++ flush ostream endl

关于流和内容的问题,我有很多问题,但经过一番思考后,我得出的结论是,我需要的只是一个自定义刷新类型。我希望我的流在获得新行时刷新。它节省了必须键入std :: endl。有可能实现这个吗?我正在使用带有自定义stringbuf的ostream。

1 个答案:

答案 0 :(得分:1)

我相信它所需要的只是覆盖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中定义的字符或字符序列的每个方法和函数。他们基本上都会做同样的事情:调用超类上定义的方法/函数,检查是否刚刚打印了换行符,如果是,则刷新。