Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Существование у std::iostream-ов seekg/seekp, Почему не хватило одного? 
:(
    Опции темы
EvilsInterrupt
Дата 29.6.2012, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Всегда интересовало почему в стандартных стримах от стандартной библиотеке C++ существует два типа "сиков"(seekg/seekp) ? Чем руководствовались разработчики? К примеру в "винде" есть один SetFilePointer и вроде как успешно работает. Зачем понадобилось различать на запись и чтение?
PM MAIL WWW ICQ Jabber   Вверх
baldina
Дата 29.6.2012, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



вообще они в итоге манипулируют одним значением (в basic_stream), однако у них разное возвращаемое значение (istream и ostream).
я так понимаю, это позволяет явно разделять семантику чтения/записи и предотвращать соответствующие ошибки
PM MAIL   Вверх
EvilsInterrupt
Дата 29.6.2012, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Мне такое понадобилось только один раз, при вставке новой секции в PE-файл. Когда надо было из одного места в файле переписать чуть дальше. При этом было удобно когда reader не менял своей позиции.
Не думаю что разработчики стандартных стримов сталкивались с подобной задачей и возможно у них была другая причина разделять позицию записи\чтения. Жутко интересно, какая?! )
PM MAIL WWW ICQ Jabber   Вверх
baldina
Дата 29.6.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(baldina @  29.6.2012,  16:26 Найти цитируемый пост)
предотвращать соответствующие ошибки


Добавлено через 1 минуту и 25 секунд
почему итераторы разных типов (in, out, forward, random) понимаешь? это то же самое

Добавлено через 3 минуты и 38 секунд
в частности, std::istream содержит seekg(), но не содержит seekp()
PM MAIL   Вверх
EvilsInterrupt
Дата 29.6.2012, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Просто у меня есть класс CustomFormat который работает c std::fstream но принятого в конструкторе класса как std::iostream . Сейчас возникла ситуация что мне нужно в другом классе который юзает этот CustomFormat получить стрим и чтобы не раскрывать деталей я пришел к выводу что мне надо бы разработать какой-нить абстрактный интерфейс стрима IStream и вернуть его в этом CustomFormat.
Но при проектировании этого интерфейса передо мной встал вопрос: а стоит ли повторять семантику std::iostream-ов и вводить аналоги seekg()/seekp() или вполне хватит одной seek() ?

К примеру qiodevice очень даже справляется с одним seek()

Вот и хочется знать: когда вообще нужны два вида файл-сиков?
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.