![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как передать параметром массив переменной длины
noob_one © (2008-10-10 13:53:00)без создания переменной этого типа?
В процедуру надо передавать массив структур вида (целое, строка, вещественное)?
пока реализовано так
param=record
Vnum:integer;
Fname:string;
mult:Double;
end;
procedure proc(const par: array of param);
begin ... end;
var p1: array of param;
begin
SetLength(p1,1);
p1[0].Vnum:=1;
p1[0].fname:='test';
p1[0].mult:=1.2;
proc(p1);
Есть какой нибудь способ передавать такие массивы без явного создания переменных для передачи?
Что-нибудь типа такого?
begin
...
proc( ((1,'test',1.2)) );
...
Renegat (2008-10-10 15:50:00) [1]> [7] noob_one (10.10.08 15:46)
Разворачивание "коротких" циклов - вещь очень полезная в плане оптимизации по скорости.
Хотя нет, у нас же тут Делфи... =)
noob_one (2008-10-10 15:46:00) [2]
> oldman
А вы любите писать пустой код? Может вы еще и циклы раскрываете?
oldman (2008-10-10 14:52:00) [3]
> noob_one (10.10.08 14:10) [2]
> сравните
> ...
> вызывать надо часто. Возиться не хочется.
Здравствуйте, Лентяй!
noob_one (2008-10-10 14:36:00) [4]Спасибо :)
sniknik (2008-10-10 14:27:00) [5]> пока реализовано так
param=record
Vnum:integer;
Fname:string;
mult:Double;
end;
function p(vVnum: integer; const vFname: string; vMult: Double): param;
begin
with result do begin
Vnum := vVnum ;
Fname:= vFname;
mult := vMult;
end;
end;
procedure proc(const par: array of param);
begin ... end;
proc([p(1,'test',1.2),p(2,'test1',0.8),p(4,'test2',1.3),p(5,'test5',1.5)]);
MBo (2008-10-10 14:25:00) [6]напиши функцию, создающую переменную типа param из составляющих (подобно функции Point), и ее можно будет использовать в конструкторе открытого массива
noob_one (2008-10-10 14:10:00) [7]сравните
SetLength(p1,4);
p1[0].Vnum:=1;
p1[0].fname:='test';
p1[0].mult:=1.2;
p1[1].Vnum:=2;
p1[1].fname:='test1';
p1[1].mult:=0.8;
p1[2].Vnum:=4;
p1[2].fname:='test2';
p1[2].mult:=1.3;
p1[3].Vnum:=5;
p1[3].fname:='test5';
p1[3].mult:=1.5;
и
proc( ((1,'test',1.2),(2,'test1',0.8),(4,'test2',1.3),(5,'test5',1.5)) );
размер может быть до 10 и вызывать надо часто. Возиться не хочется.
Правильный$Вася (2008-10-10 14:01:00) [8]а что, жалко 4 байта под переменную?