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之前銷燬? –