2012-04-27 37 views
17

我試圖找到一種方法將fout或cout傳遞給函數。我意識到有邏輯上容易的方法來處理這個問題,比如把ifs放在任何輸出數據的函數中,或者甚至只是用兩種方式編寫函數。但是,這似乎是原始的和低效的。我不相信這個代碼會工作,我把它放在這裏,以確保很容易看到我喜歡做什麼。請注意,我正在使用C++進行算法設計課程,我絕不是經驗豐富的C++程序員。我的課程僅限於使用您看到的標題。是否可以將cout或fout傳遞給函數?

#include <iostream> 
#include <iomanip> 
#include <fstream> 

using namespace std; 
void helloWorld(char); 
ofstream fout; 

int main() 
{ 
    fout.open("coutfout.dat"); 
    helloWorld(c); 
    helloWorld(f); 

    return 0; 
} 
void helloWorld(char x) 
{ 
    xout << "Hello World"; 
    return; 
} 

回答

33

這些都來自ostream繼承所以試試這個:

void sayHello(ostream& stream) 
{ 
    stream << "Hello World"; 
    return; 
} 

然後在主要傳遞對象(cout或其他),它應該工作正常。

+0

它的工作原理!我知道它不可能像我一樣努力。謝謝一堆! – ChiefTwoPencils 2012-04-27 19:22:24

+3

沒問題。查看http://en.cppreference.com/w/cpp/io/basic_ostream獲取基類。 – 2012-04-27 19:38:33

+0

@Kevin在閱讀你給出的鏈接之後,我認爲該函數應該返回'stream'作爲參數給出......'std :: ostream&sayHello(std :: ostream&stream){return stream <<「Hello World」;} – GingerPlusPlus 2014-10-05 11:32:28

12

是的。讓你的功能是

sayhello(std::ostream &os); 

然後,在功能,可以代替xout使用os

(通過一個using std::cout和喜歡的方式,using namespace std轉儲整個std名字空間,不建議都很好,雖然)。

+0

謝謝。我注意到格式似乎是慣例。那麼,使用std :: cout創建一個「快捷方式」可以使用'cout',但讓std命名空間的其餘部分保持完好? – ChiefTwoPencils 2012-04-27 20:13:34

+0

@RobertoWilko:沒錯。 '使用std :: cout'將名稱'cout'引入到當前名稱空間中供即時使用(順便說一句,如果有的話,你不能再訪問名爲'cout'的局部變量)。 – thb 2012-04-27 20:45:21

相關問題