2010-06-06 49 views
10

你好!我的問題可以描述如下方式:C++ - 實現我自己的流

我有一些數據實際上是一個數組,並且可以與一些size

被表示爲char* data我也有一些遺留碼(功能),需要一些抽象std::istream對象作爲參數,並使用該流來檢索數據進行操作。

所以,我的問題是以下 - 將我的data映射到一些std::istream對象的簡單方法,以便我可以將它傳遞給我的函數?我想從我的data創建一個std::stringstream對象,但這意味着複製和(如我所假設的)不是最好的解決方案。

任何想法如何做到這一點,以便我的std::istream直接運行在data

謝謝。

回答

10

如果您正在查看實際創建自己的流,我會查看Boost.Iostreams庫。它可以很容易地創建自己的流對象。

+0

而且,IIRC,已經拉的東西了一個std ::向量或數組的膠水。 – Thanatos 2010-06-07 00:05:25

2

使用字符串流:

#include <sstream> 

int main() 
{ 
    char[] data = "PLOP PLOP PLOP"; 
    int  size = 13; // PS I know this is not the same as strlen(data); 

    std::stringstream stream(std::string(data, size)); 

    // use stream as an istream; 
} 

如果你想成爲真正的effecient你可以用流緩衝區直接淤泥。我還沒有嘗試這樣做,沒有一個編譯器進行測試,但如下因素應該工作:

#include <sstream> 

int main() 
{ 
    char[] data = "PLOP PLOP PLOP"; 
    int  size = 13; // PS I know this is not the same as strlen(data); 

    std::stringstream stream; 
    stream.rdbuf()->pubsetbuf(data, size); 

    // use stream as an istream; 
}