Показать сообщение отдельно
  #5  
Старый 26.02.2012, 23:14
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще, данная задача решается либо через generics/templates (если не ошибаюсь, то начиная с Delphi 2010 или XE они уже есть), либо через классы. Фактисески, тебе надо описать некоторый класс, имеющий некоторое стандартное поведение. Тогда любой другой твой тип будет наследником этого класса со всеми вытекающими...

Например, есть у нас базовый класс и функция, его использующая:
Код:
type
  TMyTypeBaseClass = class
  private
    FMem : Pointer;
  public
    procedure ClassGetMem; virtual; abstract;
    procedure ClassFreeMem; virtual; abstract;
    procedure DoWork; virtual; abstract;

    property ClassMem : Pointer read FMem;
  end;

procedure MyProc(MyVar : TMyTypeBaseClass);
begin
  MyVar.ClassGetMem;
  MuVar.DoWork;
  MyVar.ClassFreeMem;
end;

Теперь можно создавать наследников этого класса и передавать из в эту процедуру.

PS. На самом деле, когда ты используешь темплейты или дженерики, то компилятор в момент компиляции просто инстанциирует данный шаблон для переданного типа. Т.е. если у нас есть:
Код:
var
  L1 : TList<Integer>;
  L2 : TList<String>;

(не помню как там дженерики пишутся, т.к. пользуюсь пока Delphi 7, где их нет), то в скомпилированном коде по факту будет 2 экземпляра класса TList - один для целых и один для строк. Причем будет и 2 экземпляра кода. И это не только в Дельфи, в C++ и C# тоже самое происходит (в Java не уверен, т.к. эта штука может классы создавать на лету, бо как работает на виртуальной машине).
Ответить с цитированием