Home Articles

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

Asked
Viewed 1485 times
0

Loki Astari提供this custom steam buffer . 当从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();

因为 std::cint.tie(&std::cout) 是预定义的连接 .

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

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

1 Answer

  • 1
    • 构造函数用于在对象创建时执行操作,因此在 MyStreamstd::cin.tie(this); 的构造函数中 Build tie是合适的 . 这可能会破坏 cincout 之间存在的任何关系,以及 cin abd您的流类的另一个实例之间的关系 .

    • 对于程序退出时的操作,C具有静态存储持续时间的对象的析构函数 .

Related