Я использую Delphi 2010, и у меня есть модуль, в который на протяжении многих лет я добавил свои собственные процедуры и функции, которые можно использовать с любым проектом, который я делаю, например:
function ListBoxIsSelected(ListBox: TListBox): Boolean;
begin
Result:= ListBox.ItemIndex <> -1;
end;
В приведенном выше примере в качестве параметра используется TListBox
, поэтому всякий раз, когда используется указанная выше функция, я должен предоставить список
, который относится к классу TListBox
.
Теперь предположим, что у меня есть некоторые другие библиотеки компонентов, которые могут работать с той же функцией, например классы компонентов Jedi.
Как я могу использовать указанную выше функцию, когда список Jedi
равен TJvListBox
, а моя функция ищет класс TListBox
? Хотя оба компонента практически одинаковы, имена классов разные. Если бы я предоставил ту же функцию специально для TJvListBox
, это, вероятно, сработало бы, потому что они оба являются «списками»:
function ListBoxIsSelected(ListBox: TJvListBox): Boolean;
begin
Result:= ListBox.ItemIndex <> -1;
end;
Теперь, У меня есть целая куча процедур и функций, написанных таким же образом, где мне нужно передать компонент в качестве параметра. Переписывать их снова, чтобы работать с другим классом компонентов, невозможно!
Как я могу написать это с помощью универсальных шаблонов?