Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обобщенная процедура / 4 сообщений из 4, страница 1 из 1
23.06.2020, 15:47
    #39972460
Damir_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обобщенная процедура
У меня возникла задача сортировки массива, но имеется два массива разных типов.
Чтобы не писать одинаковый код два раза, хочу применить обобщенную процедуру. Раньше этого не делал, тема для меня новая.
Хотел начать с объявления самой процедуры.
Первый раз написал так:
Код: pascal
1.
2.
  type TSortDEC<Type1>=
       procedure SortDEC_(Param1:Type1);


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


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

end;


Но SortDeC_ компилятор не видит. Я просто пример брал с книги где написано объявление функции, но там доп. параметры еще,
т.к. она значение возвращает.
Хотел спросить как описать процедуру, и как передать ей значение
...
Рейтинг: 0 / 0
23.06.2020, 15:53
    #39972464
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обобщенная процедура
Посмотри как реализован TList.CustomSort.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.06.2020, 16:23
    #39972477
Damir_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обобщенная процедура
я посмотрел в модуле system.generics.collection на класс ТArray и процедуру Sort.
Написал так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
type TSortDEC=class
       class procedure SortDEC_<Type1>(Param1:Type1);
end;

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

end;


Т.е. угловые скобки не добавил, а в самом типе убрал. Ну т.е. процедуры и функции должны как класс объявляться, только в моем случае в отличие от TArray я должен объявить тип процедуры как класс. Вроде не ругается сейчас компилятор.
А обращение к процедуре я думаю должно быть так :
Код: pascal
1.
2.
3.
4.
//сортировка первого массива  
TSortDEC.SortDEC_<TItemVector>(ItemVector)
//сортировка второго массива  
TSortDEC.SortDEC_<TStringVector>(StringVector)
...
Рейтинг: 0 / 0
24.06.2020, 03:01
    #39972611
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обобщенная процедура
Зачем вам писать сортировку, если уже есть TArray.Sort
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обобщенная процедура / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]