2011-04-13 27 views
2

我想寫一個簡單的istream對象,這將簡單地轉換另一個istream。我想只實現readline(它會從原始流中讀取一行,處理它並返回處理後的行),並且有一些通用代碼,它們將使用我的讀取行,緩存它,並且提供所需的字節數作爲輸出。實現簡單的輸入流

有沒有什麼課程可以讓我做到這一點?

例如

struct mystream : istreamByReadLine { 
    istream& s; 
    mystream(istream& _s):s(_s){} 
    virtual string getline() { 
    string line; 
    getline(s,line); 
    f(line); 
    return line; 
    } 
} 

class istreamByReadLine : istream { 
    ... // implementing everything needed to be istream compatible, using my 
    ... // getline() virtual method 
} 

回答

4

你有沒有看着boostiostreams?它爲你做了大部分工作(可能不是爲了你的確切用例,而是爲了一般的C++標準庫流)。

1

您確定這是要走的路嗎?在類似的情況下,我已經 要麼定義一個類(如Line),具有>>算子 做了什麼,我想,和閱讀,如:

Line line 
while (source >> line) ... 

類本身可以很簡單,只是一個std::string 成員,以及operator std::string() const函數,其中 返回它。所有的過濾工作都將在 std::istream& operator>>( std::istream&, Line& dest ) 函數中完成。或者我已經在 正常的streambuf  之前安裝了過濾streambuf;升級iostream有很好的支持,這個就是 。

+0

我想給我的流到接收'istream'的其他函數。 – 2011-04-13 10:57:59

+0

在這種情況下,您必須使用'istream'。如果這些其他程序應該看到過濾的數據,那麼您需要一個過濾streambuf;如果他們應該看到原始數據,那麼使用「Line」的解決方案更好。 – 2011-04-13 12:24:43