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行为。
此作品(感谢约祖蒂斯的 “The 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)
?
问题#2:如何修改MyStream类,以便在程序退出时自动刷新缓冲区?
在流的构造函数中调用'cin.tie(this)'。请记住,这将破坏'cin'与'cout'的关系。对于在程序退出时执行的东西,请使用具有析构函数的静态对象。 –
@ n.m。谢谢。把它放在答案的形式,我会标记它的答案。 :)有趣的是,cin.get()仍然会刷新cout&MyStream。如果我'myStream <<“打印”; cin.get(); cout <<“用cout打印”; cin.get()'都适当刷新。但是如果我'myStream <<“打印”; cout <<“用cout打印”;'console显示'用cout Print'打印。 cout必须在myStream之前销毁? –