![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Всегда интересовало почему в стандартных стримах от стандартной библиотеке C++ существует два типа "сиков"(seekg/seekp) ? Чем руководствовались разработчики? К примеру в "винде" есть один SetFilePointer и вроде как успешно работает. Зачем понадобилось различать на запись и чтение?
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
вообще они в итоге манипулируют одним значением (в basic_stream), однако у них разное возвращаемое значение (istream и ostream).
я так понимаю, это позволяет явно разделять семантику чтения/записи и предотвращать соответствующие ошибки |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Мне такое понадобилось только один раз, при вставке новой секции в PE-файл. Когда надо было из одного места в файле переписать чуть дальше. При этом было удобно когда reader не менял своей позиции.
Не думаю что разработчики стандартных стримов сталкивались с подобной задачей и возможно у них была другая причина разделять позицию записи\чтения. Жутко интересно, какая?! ) |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Просто у меня есть класс CustomFormat который работает c std::fstream но принятого в конструкторе класса как std::iostream . Сейчас возникла ситуация что мне нужно в другом классе который юзает этот CustomFormat получить стрим и чтобы не раскрывать деталей я пришел к выводу что мне надо бы разработать какой-нить абстрактный интерфейс стрима IStream и вернуть его в этом CustomFormat.
Но при проектировании этого интерфейса передо мной встал вопрос: а стоит ли повторять семантику std::iostream-ов и вводить аналоги seekg()/seekp() или вполне хватит одной seek() ? К примеру qiodevice очень даже справляется с одним seek() Вот и хочется знать: когда вообще нужны два вида файл-сиков? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |