給定一個指向ASCII 字串的常數char* 指針,你能設計一個解決方案來讀取資料嗎就好像它是從檔案中串流一樣?關鍵要求是資料應保持不變。
解決方案在於建立自訂流緩衝區。這是一個自訂實作:
#include <streambuf> #include <istream> struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); // Casting for interface compatibility this->setg(p, p, p + size); } }; struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size) , std::istream(static_cast<std::streambuf*>(this)) {} };
使用此自訂緩衝區,您可以建立一個圍繞常數資料的輸入流:
// data points to a string "42 3.14 blah" imemstream in(data, data_size); int x; float y; std::string w; in >> x >> y >> w;
此方法允許您可以從常數記憶體中讀取而不更改原始數據,這與需要複製的字串流不同。
以上是是否可以使用自訂流緩衝區從常量記憶體中讀取數據,就像從檔案中讀取資料一樣?的詳細內容。更多資訊請關注PHP中文網其他相關文章!