gpt4 book ai didi

c++ - 自定义流缓冲区能否在程序退出时和请求输入时自动刷新?

转载 作者:行者123 更新时间:2023-11-28 07:31:47 26 4
gpt4 key购买 nike

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) 是预定义的连接。

问题 #1:我能否修改 MyStream 类以将其绑定(bind)到 cin 流,这样我就不必发出 std::cin.tie(&myStream)每次我创建一个实例?

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

最佳答案

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

关于c++ - 自定义流缓冲区能否在程序退出时和请求输入时自动刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17532460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com