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

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

Переменные различного типа в параметре процедуры [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?


Наверх

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