3 回答

TA貢獻1808條經驗 獲得超4個贊
這樣做的方法是創建一個合適的流緩沖區。例如,可以這樣做:
#include <streambuf>
#include <istream>
struct membuf: std::streambuf {
membuf(char const* base, size_t size) {
char* p(const_cast<char*>(base));
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)) {
}
};
唯一有點尷尬的是const_cast<char*>()流緩沖區中的內容:流緩沖區不會更改數據,但仍需要char*使用該接口,主要是為了更輕松地更改“常規”流緩沖區中的緩沖區。這樣,您可以將其imemstream用作普通輸入流:
imemstream in(data, size);
in >> value;

TA貢獻1862條經驗 獲得超6個贊
唯一的方法是將std :: istream子類化(這也需要將std :: streambuf子類化)以創建自己的從常量內存讀取的流類。
這并不像聽起來那樣容易,因為C ++標準庫流類非?;靵y且設計不良。除非您需要大量擴展,否則我認為這不值得。

TA貢獻1802條經驗 獲得超4個贊
上周,我了解到我們目前的目標是C ++ 2014!也就是說,需要在4月份提交完整的建議書,準備將其提交工作文件-盡管這是一個很小且實際上有用的功能,但我認為這種情況不會發生。一個絆腳石是,每當為IOStreams提出任何建議時,都會有一個主要的抱怨:“我們能不能有更好的東西?” 但沒有人提出更好的建議……
- 3 回答
- 0 關注
- 399 瀏覽
添加回答
舉報