c++ - 自定义流冲洗类型

标签 c++ flush ostream endl

我有很多关于流和东西的问题,但经过一番思考后,我得出的结论是我需要的只是一个自定义刷新类型。我希望我的流在换行时刷新。它省去了输入 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 中定义的字符或字符序列的方法和函数。他们基本上都会做同样的事情:调用父类(super class)上定义的方法/函数,检查是否打印了换行符,如果是则刷新。

关于c++ - 自定义流冲洗类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4417682/

相关文章:

c# - 如何在 C# 中使用的以 C++ 编写的外部 .dll 资源上正确创建入口点

c++ - 带有 std::vector 和带有缩减的标量变量的 OpenMP for 循环

java - JAVA中flush()和reset()的区别

c++ - 避免在 C++ MPI 中为 cout 重复 if 语句

通用模板 ostream << 运算符的 C++ 不明确重载

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c - fflush 不起作用

python - 是否有必要在 python 中调用文件处理程序的刷新方法

c++ - 我可以在这里重载基类中的 << 运算符吗?

c++ - 将STL算法传递给另一个函数