![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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);