basic_streambuf::seekoff, что должно быть возвращено, когда ios_base::in | ios_base::out указан?

27.6.3.4.2 Управление буфером и позиционирование

pos_type seekoff(off_type off, ios_base::seekdir way,
    ios_base::openmode which = ios_base::in | ios_base::out);
  • Эффекты: изменяет позиции потока в одной или нескольких контролируемых последовательностях способом, который определяется отдельно для каждого класса, полученного из basic_streambuf в этом пункте (27.8.2.4, 27.9.1.5).
  • Поведение по умолчанию: Возвращает pos_type(off_type(-1)),

Все идет нормально. basic_streambuf вывод, который я использую, может изменить свою позицию отдельно для ios_base::in и / или ios_base::out, Но что мне нужно вернуть, когда указаны оба?

Если вы укажете ios_base::in или же ios_base::out, мы бы вернули новую позицию потока определенной последовательности.

2 ответа

Решение

Это немного зависит от вашего потока, чтобы определить, что происходит. Встроенные потоки отличаются тем, что некоторые могут иметь отдельные позиции чтения и записи (stringstream), в то время как другие просто имеют одну (fstream).

Если пользователь делает репозицию и указывает оба входа и выхода, возможно, вам следует переместить оба. Если это поиск с нулевым смещением для получения текущей позиции, не исключено, что провал, если позиции различаются.

После поиска в 27.8.2.4 кажется, что вы потерпите неудачу.

Проверьте таблицу условий 130, в которой говорится, что обе входные и выходные последовательности должны быть расположены только в том случае

(which & (ios_base::in | ios_base::out)) == (ios_base::in) | ios_base::out))
and way == either ios_base::beg or ios_base::end
Другие вопросы по тегам