2010-12-11 18 views
1

我已經有過關於流和東西的問題的多個問題,但想了一下後,我得出結論,我需要的是一個自定義刷新類型。我想讓我的流在刷新一行時刷新。它節省了必須輸入std :: endl。有沒有可能實現這一點?我正在使用帶有自定義字符串的ostream。自定義流刷新類型

+0

請原諒我,但是爲什麼輸入'endl'要困難幾次,幾乎是從頭開始寫新流? – 2010-12-11 16:36:00

+0

這不是因爲它有可能出於興趣,如果是的話,如何。 – Jookia 2010-12-11 16:37:38

回答

1

我相信,所有這將需要被重寫ostream::put(char),但不可以引用我這句話:

template <typename Ch> 
class autoflush_ostream : public basic_ostream<Ch> { 
public: 
    typedef basic_ostream<Ch> Base; 
    autoflush_ostream& put(Ch c); 
}; 

template <typename Ch> 
autoflush_ostream<Ch>& autoflush_ostream<Ch>::put(Ch c) { 
    Base::put(c); 
    if (c == "\n") { 
     flush(); 
    } 
    return *this; 
} 

您可能需要重寫每個方法和函數,它是在定義的字符的字符或序列STL。他們基本上都會做同樣的事情:調用超類定義的方法/函數,檢查是否打印了新行,如果是,則刷新。

+0

basic_ostream :: put不是虛擬的,因此除非對象的靜態類型爲autoflush_ostream(即autoflush_ostream對象,引用或指針),否則不會使用派生類的版本。特別是,這意味着'stream <<'\ n''不能調用你的put。 – 2010-12-11 20:17:29

+0

教我選擇睡眠模式。 – outis 2010-12-12 20:24:34