Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Параметры типа procedure of object   Найти похожие ветки 

 
Sandman25+1   (2004-05-18 10:25) [0]

Доброе время суток.

Есть различные методы, назовем их:
proc1(p1: Integer; p2: TMyOrdinalType)
proc2(p1: Integer; p2: Integer; p3: Integer);
proc3(p1: TMyOrdinalType)

Часто бывает необходимость вызывать их вот так:

Запомнить контекст
try
 proc1(p1, p2); // или proc2(p1, p2, p3) и т.д.
finally
 Восстановить контекст
end;
 

Я написал
type
 TProc = procedure (const Params: array of Variant) of object;
procedure DoInContext(DataSet: TDataSet; Proc: TProc; const Params: array of Variant);
var
 Filter: String;
begin
 Filter := GetOldFilterAndDisableControls(DataSet)
 try
   Proc(Params);
 finally
   SetOldFilterAndEnableControls(DataSet, OldFilter);
 end;
end;

Есть ли какой-нибудь способ добиться того, чтобы не было массива вариантов? Не очень удобно работать с параметрами в виде Params[I] вместо смысловых обозначений. Да и медленно это :(
Спасибо.

PS. Я пытался делать и через создание overload версий DoInContext, но в таком случае приходится копировать строки с OldFilter, к тому же и так уже есть overload версия DoInContext с первым параметром в виде array of DataSet. Не хочется писать одно и то же 20 раз вместо 2.


 
PVOzerski ©   (2004-05-18 10:45) [1]

Можно попробовать array of const, хотя это не намного удобнее (если не хуже). Или просто передавать указатели на структуры или использовать нетипизированные параметры.


 
Sandman25+1   (2004-05-18 10:53) [2]

PVOzerski

Огромное спасибо! Сделал через (var Param), а внутри конкретных процедур пишу локальную переменную наподобие var MyVar: TMyRecordType absolute Param. Получается передача всего одного параметра, удобство использования осмысленных имен в каждой процедуре и скорость работы за счет разрешения адресов полей еще на этапе компиляции. Остается только сделать функции для возврата записей с нужными полями. Еще раз большущее спасибо!



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
1-1084767681
Бушин Сергей
2004-05-17 08:21
2004.05.30
Можно ли узнать, что прога откомпилирована именно Delphi


7-1082541474
-=Uncle Bob=-
2004-04-21 13:57
2004.05.30
обработка клавиш


1-1084850912
IrBisoff
2004-05-18 07:28
2004.05.30
TImageList в RunTime


3-1084030448
exe
2004-05-08 19:34
2004.05.30
Получение всех Aliasov


14-1084526464
Карелин Артем
2004-05-14 13:21
2004.05.30
Где взять бесплатный невидимый счетчик на страницу?