Estoy tratando de crear un istream
que se lea directamente desde un buffer de memoria en bruto.istream :: tellg() devuelve -1 cuando se usa con mi clase streambuf personalizada?
me pareció una buena manera de hacer esto en otro post aquí:
class membuf : public basic_streambuf<char>
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
Entonces Creo mi istream
usar este membuf
:
membuf mb(dataPointer, dataLength);
istream reader(&mb);
luego leí usando getline()
y >>
operadores, y todo es maravilloso Sin embargo, parece que no puedo usar seekg()
para rebobinar al principio de mi búfer, y istream::tellg()
siempre devuelve -1
.
¿Debo escribir algo más de código para que funcionen o está destinado a fallar?
¿Sabe _que 'seekg()' no se está rebobinando? ¿Has probado que 'tellg()' funciona correctamente? –
Sí, después de llamar a seekg (0), getline() no lee mi primera línea. La función tellg() definitivamente no funciona, ya que siempre devuelve -1 (incluso cuando recién comencé a leer desde mi buffer). Creo que la respuesta de Bo es la manera de ir aquí ... – EdSanville
E @ dSanville: OK; Aclaré tu pregunta en consecuencia. –