Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Mfc и Stl ввод-вывод

284
14 февраля 2006 года
michael_is_98
587 / / 25.02.2005
Вопрос по потокам. Ранее для чтения данных я использовал класс MFC CMemFile, который позволял читать данные из абстрактного источника данных (файл или строка). Т.е. можно было создать объект класса CFile и затем передавать его указателю на объект CMemFile, далее работая с объектом CMemFile.
Сейчас я решил переделать эту часть кода на STL.
Можно ли в STL реализовать что-то подобное (видимо с использованием istream и ifstream).
Если да, то кто может показать пример использования, а именно создание объектов класса istream и ifstream, передача этих объектов в процедуру, чтение данных...
Спасибо!
284
15 февраля 2006 года
michael_is_98
587 / / 25.02.2005
Можно конкретизировать: у меня в классе используется в качестве приватного члена поток - компонент класса istream.
В конструкторе он должен инициализироваться. Но не удается скомпилировать код.

Код:
class CParser
{
private:
    istream& stream;
public:
    CParser(istream &);
    ~CParser();
};

CParser:: CParser(istream &stream)
{
    stream=stream1;// не срабатывает: ошибка при компиляции
'CParser::stream' : must be initialized in constructor base/member initializer list
}
2.4K
15 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by michael_is_98

private:
istream& stream;
[/code]



Ссылки нужно инициализировать
или не использовать

istream stream;

3
15 февраля 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by dinasok51
Ссылки нужно инициализировать
или не использовать

istream stream;



В указанном тобой куске ошибки нет

 
Код:
private:
       istream& stream;

ошибка в конструкторе, должно быть так:
 
Код:
CParser::CParser(istream &stream) :stream(stream)
{
}
2.4K
15 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by Green
В указанном тобой куске ошибки нет
 
Код:
private:
       istream& stream;



Неинициализированная ссылке есть ИМХО ошибка

Цитата:
Originally posted by Green
 
Код:
CParser::CParser(istream &stream) :stream(stream)
{
}


Это и есть инициализация.(без ИМХО)

284
16 февраля 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by dinasok51
Неинициализированная ссылке есть ИМХО ошибка


Это и есть инициализация.(без ИМХО)


А что все-таки лучше: использовать класс istream или пользоваться CFile (в двух аспектах - скорость и переносимость)?

398
16 февраля 2006 года
Alexandoros
630 / / 21.10.2005
Лучше CreateFile/ReadFile. Что ты с переносимостью делать будеш? Серъезную прогу ты просто так не перенесеш, потому как серъезные проги используют особенности системы, а простую и переписать ниче не стоит. Это не джава :)
3
16 февраля 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Alexandoros
Лучше CreateFile/ReadFile.


Чем лучше то?
Чем грузины?

2.4K
16 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by michael_is_98
А что все-таки лучше: использовать класс istream или пользоваться CFile (в двух аспектах - скорость и переносимость)?



К переносимости я отношусь очень скептически.

По поводу быстродействия:
Я сравнивал на VS6 CFile, потоки, CreateFile/ReadFile/WriteFile и семейство fopen/fread/fwrite.

fopen/fread/fwrite работали на моих тестах быстрее всех.

В VS 2002/2003/2005 ситуация могла измениться.

284
17 февраля 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by dinasok51
К переносимости я отношусь очень скептически.

По поводу быстродействия:
Я сравнивал на VS6 CFile, потоки, CreateFile/ReadFile/WriteFile и семейство fopen/fread/fwrite.

fopen/fread/fwrite работали на моих тестах быстрее всех.

В VS 2002/2003/2005 ситуация могла измениться.


Странно, я сделал все на потоках и сравнил чтение файла из потока (способ1) с чтением файла через MapViewOfFile (способ2). Что получилось в итоге?

На Vs97 (VC5.0) способ1 медленнее, чем способ2
На VS2003 (VC7.0) способ1 быстрее, чем способ2

В чем дело? Думаю что-то здесь с streambuf не в порядке. Может быть в VS2003 какие-то используются умолчания, которых нет в VS97?
Не могла же потоковая библиотека кардинально измениться за неск. лет.

284
17 февраля 2006 года
michael_is_98
587 / / 25.02.2005
Похоже потоковая библиотека действительно изменилась.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог