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的“The C ++ Standard Library”):
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)
吗? p>
问题#2 :如何修改MyStream类,以便在程序退出时自动刷新缓冲区?
答案 0 :(得分:1)
MyStream
:std::cin.tie(this);
的构造函数中建立关系是合适的。这可能会破坏cin
和cout
之间存在的任何关系,以及cin
之间的另一个流类实例。