Главная страница
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.026 c
4-1081593816
Kerk
2004-04-10 14:43
2004.05.30
Drag&Dock


7-1082428272
VonVan
2004-04-20 06:31
2004.05.30
Перезагрузка, Выключение PC


8-1080121247
Jeka_
2004-03-24 12:40
2004.05.30
Запись видео или изображения с вэб-камеры.


14-1084354404
Соловьев
2004-05-12 13:33
2004.05.30
Кто борол?


1-1084363991
dim-
2004-05-12 16:13
2004.05.30
tree и Data