可以在程序退出时和请求输入时自动刷新自定义流缓冲区

Can a custom stream buffer automatically flush at program exit and when requesting input?

本文关键字:刷新 自定义 缓冲区 输入 请求 程序 退出      更新时间:2023-10-16

Loki Astari提供这种自定义蒸汽缓冲。当从cin::cin读取时或当应用程序存在时,如何将类更改为自动刷新?例如:

int main ()
{
    MyStream myStream(std::cout);
    myStream << "This does not print.";
}

int main()
{
    MyStream myStream(std::cout);
    myStream << "This does not print.";
    std::cin.get();
}

std::cout << "This does print.";

std::cout << "This does print.";
std::cin.get();

如果我强迫它

myStream << "This will now print." << std::flush;

然而,我希望复制在程序退出或std::cin时自动触发的cout行为。

这项工作(感谢Josuttis的"C++标准库"):

    MyStream myStream(std::cout);
    std::cin.tie(&myStream);
    myStream << "This will now print.";
    std::cin.get();

因为CCD_ 1是预定义的连接。

问题#1:我可以修改MyStream类以将其绑定到cin流吗?这样我就不必每次创建实例时都发出std::cin.tie(&myStream)了?

问题2:如何修改MyStream类,以便在程序退出时自动刷新缓冲区?

  1. 构造函数被设计为在对象创建时执行任务,因此在MyStream:std::cin.tie(this);的构造函数中建立联系是合适的。这可能会打破cincout之间以及cin和流类的另一个实例之间存在的任何联系
  2. 对于在程序出口处执行的操作,C++具有静态存储持续时间的对象的析构函数