0

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();

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

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

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

4

1 回答 1

1
  1. 构造函数被设计为在对象创建时做事,所以在MyStream:的构造函数中建立联系是合适的std::cin.tie(this);cin这可能会破坏和之间存在的任何联系cout,and.orcin与您的流类的另一个实例之间存在。
  2. 对于在程序退出时执行的操作,C++ 具有具有静态存储持续时间的对象的析构函数。
于 2013-07-08T18:16:54.757 回答