Неразрушаемое чтение из потока - PullRequest
0 голосов
/ 05 августа 2009

Можно ли попытаться прочитать из потока, но не изменить сам поток (и вернуть bool, если это был успех)?

template <typename T> bool SilentRead (stringstream& s, T& value) {
    stringstream tmp = s;
    tmp >> value;
    return tmp;
}

Это не работает, потому что stringstream не имеет открытого конструктора копирования. Как это сделать тогда?

Можно ли решить эту проблему, если мы заменим stringstream на istream?

Ответы [ 3 ]

2 голосов
/ 05 августа 2009

В общем это невозможно. Базовый streambuf не имеет интерфейса. Однако вы можете создать упаковщик streambuf. Вы по-прежнему не сможете выполнять неразрушающие операции чтения в потоке, но вы можете выполнять их в своей оболочке streambuf. * ​​1001 *

(Оболочка streambuf является реализацией интерфейса std :: streambuf, который направляет свои операции ввода-вывода в базовый поток streambf)

1 голос
/ 05 августа 2009

StringStream, ссылаясь на this , позволяет использовать tellg и seekg для получения / установки позиции. Чтобы вы могли:
1. Получить текущую позицию
2. Читать
3. Установите текущую позицию на единицу, которую вы только что прочитали.

0 голосов
/ 05 августа 2009
...