Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

указатель на метод с переменными параметрами

286
22 ноября 2007 года
misha_turist
572 / / 28.11.2005
Доброго времени суток.

Подскажите, как можно сделать переменную-указатель на процедуры/методы с разным числом и/или типом параметров и соответственно вызывать их через эту переменную?

Или как альтернатива, как присвоить обычной переменной-указателю на процедуры/методы процедуру в процедуре (не помню точного названия) и соответственно вызывать их?

Сзаранее спасибо. :)
303
23 ноября 2007 года
makbeth
1.0K / / 25.11.2004
Как всегда, экстремальные эксперименты? ;)
На самом деле, универсальный тип Pointer скушает все, но вот как потом с ним работать? В любом случае понадобится где-то хранить информацию по типам и количеству передаваемых параметров.
Про альтернативу - если я правильно понял, речь идет о вложенных процедурах - тут все еще веселее, поскольку кроме собственных параметров в стеке у них могут использоваться параметры из стека процедуры, где они объявлены.
Кстати, года два назад вроде была подобная темка, но там по-моему, так решение и не нашли.

Если не секрет, зачем тебе все это понадобилось? :)
286
23 ноября 2007 года
misha_turist
572 / / 28.11.2005
Цитата: makbeth
Если не секрет, зачем тебе все это понадобилось? :)


Не секрет.:) Я пишу у себя модуль логирования...

Код:
procedure LogProcedure (const proc : TThreadMethod; str : string; const OwnerName : string=''; WriteValidResultMessege : boolean = false);
begin
 WriteLog(str, OwnerName);
 try
   proc;
  if WriteValidResultMessege then WriteLog(ValidResultMessege);
 except
  on e:Exception do begin
                     WriteLog(e.Message);
                     raise;
                    end;
 end;
end;
 
procedure LogProcedure (const proc : TProcedure; str : string; const OwnerName : string=''; WriteValidResultMessege : boolean = false);
begin
 WriteLog(str, OwnerName);
 try
  proc;
  if WriteValidResultMessege then WriteLog(ValidResultMessege);
 except
  on e:Exception do begin
                     WriteLog(e.Message);
                     raise;
                    end;
 end;
end;

Но так как логировать нужно разые процедуры и методы, то и получается нужно, чтоб я мог передать абстрактную процедуру/метод. Выходом могло быть создание вложений процедуры без параметров, но её как указатель передавать нельзя...:(. Вот и приходится в некоторых частях кода приложения вставлять напрямую тело приведённых процедур, что "не есть гуд".:(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог