2013-02-04 73 views
3

我目前正在處理一個自定義緩衝區類,它在其內部傳遞其經典C數組(無符號字符[])中的數據。將std :: istream直接連接到C數組/無符號字符*

爲了獲得對該緩衝區更爲舒適的讀/寫訪問權限,我正在尋找一種方法來構建直接連接到POD內容的std :: istream對象...也就是C陣列內存。目標是將所有std :: stream格式化程序和實際數據「lorem ipsum」直接寫入緩衝區。所以像這樣:

std::istream QuirkyBuffer::getIStream() { return std::istream(this->ptr, this->size); } 

QuirkyBuffer d; 
auto is = d.getIStream(); 
"lorem ipsum" >> is; 

有沒有可能這樣做?

回答

2

您可以使用std::ostrstream。它已被棄用,但鑑於其實用性,我無法想象它很快就會消失。

否則,編寫自己的omemstream非常簡單。

1

istream不是問題,問題在於寫入流緩衝區,因爲例如, ifstream只是一個從istream派生的類,它包含一個流緩衝區和一些膠水代碼。現在,爲了編寫流緩衝區,您需要覆蓋私有虛擬輸入函數。我認爲underflow()和uflow()是足夠的,但使用這些關鍵字你應該能夠自己找到所需的信息。

順便說一句:流是不可複製的,除非在C++ 11中進行了更改,所以通過值返回是一個禁止行爲。