2015-04-23 74 views
1

假設我有一個名爲print的簡單函數,其中一個循環使用cout來打印控制檯,比如1-5。C++函數cout重定向到文件

有沒有一種方法,我可以這樣做:

file << print(); 

拿到print輸出保存到一個文件?很明顯,假設我正確地打開了文件ofstream,以及所有內容。

回答

2

假設printvoid功能,其輸出硬編碼爲cout,有什麼可以做:輸出將通過輸出流(控制檯的執行環境的分配來控制默認或一個文件重定向>myoutput.txt)。

如果你想你的程序來控制,其中輸出變爲,通過ostream&print功能,並使用它的輸出:如果你想print輸出到控制檯或默認的輸出

void print(ostream& ostr) { 
    // use ostr instead of cout 
    ostr << "hello, world!" << endl; 
} 

,叫

print(cout); 

如果你想讓它寫入文件,做出ofstream,並把它傳遞給print

ofstream file("hello.txt"); 
print(file); 
2

「有沒有辦法?」:不......不是不改變print()和/或在調用者中添加更多的代碼。當你說...

file << print(); 

...什麼發送到文件流是什麼的print()返回。正如你所說的print()正在發送所需的輸出到std::cout,返回值的表面上我們不會有任何我們想要的file,所以除非它是一個空字符串,最好讓調用者不寫file << print();

相反,調用方應轉移輸出coutfile調用print()前:James' answer here展示瞭如何可以做。