2017-10-18 186 views
-1

有什麼方法可以將ifstream轉換爲istream?我有一個叫做getToken(istream* br)的函數,它接受一個istream作爲參數,但在我的main()中,我使用ifstream來讀取一個文件,我必須使用這個相同的ifstream來調用getToken。我怎樣才能克服這個問題?如何將ifstream轉換爲istream

+1

你不需要它*已經*一個'流'' – Galik

+0

'ifstream'從'istream'派生。你應該能夠將它傳遞給'getToken'。當你嘗試時會發生什麼?顯示一個[mcve] –

+0

除了Galik的評論,如果你真的想要一個'istream&'或'istream *',你可以'dynamic_cast'。但它沒有必要,並增加了額外的開銷。另請參閱[C++中的dynamic_cast和static_cast](https://stackoverflow.com/q/2253168/608639)。 – jww

回答

4

正如在評論中提到的,你不需要做任何奇特的事情。 std::ifstream類型繼承自std::istream,因此任何採用istream*的函數都可以將指針指向ifstream作爲輸入。例如:

string getToken(istream* stream) { 
    ... 
} 

ifstream fileStream; 
getToken(&fileStream); 

這些streams類是專門設計用來使這種操作成爲可能的。

相關問題