![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переменные различного типа в параметре процедуры [D6]
OperaM © (2011-02-04 18:58:00)Здравствуйте!
Как извертеться , чтоб в вызываемую процедуру можно было класть неизвестное заранее число переменных различного типа, присвоить им в этой процедуре значения и вернуть их вызывающей программе. Т.е. что-то типа такого:
procedure pname( var p:array of TVarRec );
begin
p[0].VInteger:=5;
p[1].VString:='text';
end;
procedure main;
var
i:integer;
s:string;
begin
pname([i,s]);
if i=5...
end;
KilkennyCat (2011-02-04 23:20:00) [1]
> Сергей М. © (04.02.11 22:15) [5]
лучше "в", чем "на"
Сергей М. (2011-02-04 22:15:00) [2]Что ни день, то кладут в процедуры.
Xapakupu (2011-02-04 21:00:00) [3]Так как вызываемая процедура кладет значения согласно какой-то своей внутренней логике; а вызывающий код, соответственно, типа "знает", что ему вернули, и может корректно эти возвращенные значения извлечь, то напрашивается мысль, что...
...количество вариантов возвращаемых наборов "переменных" есть фиксированным и известно, в общем, еще на этапе компиляции...
...а потому, думаю, не следует идти против природы строго типизированного языка, коим является Delphi...
...и реализовать ограниченный набор перегруженных функций(oveload) со всеми вытекающими отсюда прелестями, как-то, проверкой типов еще на этапе компиляции.
Если же хочется чего-то необычного, то, думаю, следует смотреть в сторону решений по типуDB.TParams... ибо с именованными параметрами работать проще, да и с порядком следования возвращаемых данных никакой неразберихи... лишь бы с именами не напутать, да с типами данных... и, опять же таки, "грабли" полезут уже на этапе выполнения...
Anatoly Podgoretsky (2011-02-04 20:00:00) [4]> OperaM (04.02.2011 18:58:00) [0]
(const A:array of const)
Плохиш (2011-02-04 19:51:00) [5]
<
type
TDynVariant = array of Variant;
...
procedure pname(p:TDynVariant);
/CODE>
Ega23 (2011-02-04 19:05:00) [6]pointer?