Вообще, данная задача решается либо через 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 не уверен, т.к. эта штука может классы создавать на лету, бо как работает на виртуальной машине).