生メモリバッファから直接読み取るistream
を作成しようとしています。istream :: tellg()は、私のカスタムstreambufクラスで使用すると-1を返します。
私はここに別のポストでこれを行うには良い方法を見つけました:
class membuf : public basic_streambuf<char>
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
は、その後、私はこのmembuf
使用して私のistream
を作成します。
membuf mb(dataPointer, dataLength);
istream reader(&mb);
を私はその後、getline()
と>>
演算子を使用して読んで、すべてが素晴らしいです。しかし、seekg()
を使用してバッファの先頭に巻き戻すことはできません。は常に-1
を返します。
これを機能させるには、もっとコードを書く必要がありますか、それとも失敗するのでしょうか?
seekg()は巻き戻していませんか? 'tellg()'が正しく動作することを証明しましたか? –
はい、seekg(0)を呼び出した後、getline()は私の最初の行を読みません。 tellg()関数は、(バッファから読み込みを始めたばかりであっても)常に-1を返すので、正しく動作しません。私はボーの答えはここに行く方法だと思う... – EdSanville
E @ dSanville:OK;私はそれに応じてあなたの質問を明確にしました。 –