Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Overoading


Leviathan ©   (2002-09-07 20:27:00) 

Имеется процедура:


procedure Write(Ident: Word; var Stream: TFileStream); overload;
begin
IF Stream.Write(Ident, SizeOf(Word)) <> SizeOf(Word) THEN
MessageDlg(ERROR_MESSAGE, mtError, [mbOk], 0);
end;

И еще одна точно такая же, отличие только в том, что вместо TFileStream стоит TMemoryStream. Вопрос такой: можно ли как-нибудь сделать двойной заголовок и.т.п., или исходник обречен содержать две абсолютно одинаковые процедуры?


Старый Паскалист   (2002-09-11 19:43:00) [1]

Доктор сказал - в морг (в смысле убери var) - значит в морг.
В паскале, в отличие от С++, объекты никогда не передаются
по значению, но всегда по ссылке. Безо всякой var.

Поэтому ты можешь смело изменять Stream, и изменения будут
происходить именно с "физически существующим", как ты выражаешься, потоком.


Leviathan   (2002-09-11 19:33:00) [2]

Так в том то и дело, что нужно, чтобы физически существующий Stream, после выполнения изменился. Если он и так изменится, объясните мне тогда, зачем в параметрах функции указывается var.


Юрий Зотов   (2002-09-09 23:29:00) [3]

Без проблем. Вы же меняете не сам Stream, а его свойства. Никто этого не запрещает.


Kopetr   (2002-09-09 21:32:00) [4]

Дак она и изменится.


Leviathan   (2002-09-09 21:19:00) [5]

К сожалению, обязательна именно передача через var, поскольку должны быть изменены свойсва конкретного потока, переданного в функцию (а если точнее, измениться должно его Position). Есть еще какие-нибудь предложения?


McSimm   (2002-09-08 13:22:00) [6]

Т.е.
procedure Write(Ident: Word; Stream: TStream);


McSimm   (2002-09-08 13:20:00) [7]

Не нужно как varпередавать


Kopetr   (2002-09-08 13:19:00) [8]

Примерно так: Write(Id, TStream(FStream))
(var FStream: TFileStream)


Leviathan   (2002-09-08 12:58:00) [9]

Не получается, уже пробовал, при попытке передать в процедуру TFileStream возникает ошибка - пишет, что var параметр в объявлении функции must be identical. Или это как-нибудь через AS можно обыграть?


Kopetr   (2002-09-07 20:44:00) [10]

Можно просто написать
procedure Write(Ident: Word; var Stream: TStream);


Наверх

Титульная страница Поиск, карта сайта Написать письмо