Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Обобщенная процедура  [new]
Damir_85
Member

Откуда:
Сообщений: 235
У меня возникла задача сортировки массива, но имеется два массива разных типов.
Чтобы не писать одинаковый код два раза, хочу применить обобщенную процедуру. Раньше этого не делал, тема для меня новая.
Хотел начать с объявления самой процедуры.
Первый раз написал так:
  type TSortDEC<Type1>=
       procedure SortDEC_(Param1:Type1);

Здесь компилятор выдает ошибку, что SortDEC_ неизвестная директива.
Потом написал так:
type TSortDEC<Type1>=class
       class procedure SortDEC_(Param1:Type1);
end;

Так вроде не ругается на этот участок кода. Хотел спросить, только так объявляются обобщенные процедуры, т.е. как класс?
А потом хотел написать сам код процедуры, объявив заголовок так:
class procedure TSortDEC.SortDEC_(Param1:Type1);
begin

end;

Но SortDeC_ компилятор не видит. Я просто пример брал с книги где написано объявление функции, но там доп. параметры еще,
т.к. она значение возвращает.
Хотел спросить как описать процедуру, и как передать ей значение
23 июн 20, 15:47    [22156103]     Ответить | Цитировать Сообщить модератору
 Re: Обобщенная процедура  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50381

Посмотри как реализован TList.CustomSort.

Posted via ActualForum NNTP Server 1.5

23 июн 20, 15:53    [22156108]     Ответить | Цитировать Сообщить модератору
 Re: Обобщенная процедура  [new]
Damir_85
Member

Откуда:
Сообщений: 235
я посмотрел в модуле system.generics.collection на класс ТArray и процедуру Sort.
Написал так:
type TSortDEC=class
       class procedure SortDEC_<Type1>(Param1:Type1);
end;

class procedure TSortDEC.SortDEC_<Type1>(Param1:Type1);
begin

end;

Т.е. угловые скобки не добавил, а в самом типе убрал. Ну т.е. процедуры и функции должны как класс объявляться, только в моем случае в отличие от TArray я должен объявить тип процедуры как класс. Вроде не ругается сейчас компилятор.
А обращение к процедуре я думаю должно быть так :
//сортировка первого массива  
TSortDEC.SortDEC_<TItemVector>(ItemVector)
//сортировка второго массива  
TSortDEC.SortDEC_<TStringVector>(StringVector)
23 июн 20, 16:23    [22156126]     Ответить | Цитировать Сообщить модератору
 Re: Обобщенная процедура  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1711
Зачем вам писать сортировку, если уже есть TArray.Sort
24 июн 20, 03:01    [22156379]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить