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 回答
构造函数用于在对象创建时执行操作,因此在
MyStream
:std::cin.tie(this);
的构造函数中 Build tie是合适的 . 这可能会破坏cin
和cout
之间存在的任何关系,以及cin
abd您的流类的另一个实例之间的关系 .对于程序退出时的操作,C具有静态存储持续时间的对象的析构函数 .