Главная страница
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.039 c
3-1083919010
Tugodym
2004-05-07 12:36
2004.05.30
Вопрос по фильтрации


7-1082889675
gyry
2004-04-25 14:41
2004.05.30
Вырубание компа


1-1084467098
Kreon
2004-05-13 20:51
2004.05.30
OnMouseWheelDown,Up


4-1081938230
Tommy
2004-04-14 14:23
2004.05.30
NTQuerySystemInformation and Threads


8-1079429376
Monk-Warrior
2004-03-16 12:29
2004.05.30
Размещение на форме картинки в формате gif