Форум: "Основная";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизПараметры типа 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.049 c