关于流和内容的问题,我有很多问题,但经过一番思考后,我得出的结论是,我需要的只是一个自定义刷新类型。我希望我的流在获得新行时刷新。它节省了必须键入std :: endl。有可能实现这个吗?我正在使用带有自定义stringbuf的ostream。
答案 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中定义的字符或字符序列的每个方法和函数。他们基本上都会做同样的事情:调用超类上定义的方法/函数,检查是否刚刚打印了换行符,如果是,则刷新。