Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.02.14;
Скачать: CL | DM;

Вниз

Операция сравнения в дженериках   Найти похожие ветки 

 
Друг   (2014-07-09 15:54) [0]

Пытаюсь сравнить между собой две переменные типа T
if (a < b) then ...

Ругается. Какого спрашивается фига?


 
Друг   (2014-07-09 15:55) [1]

в качестве T использую Integer


 
brother ©   (2014-07-09 16:06) [2]

> Ругается.

как?


 
Друг   (2014-07-09 16:31) [3]

type
 TMyGeneric<T> = class
   class function IsLess(const a, b: T): boolean;
 end;

class function TMyGeneric<T>.IsLess(const a, b: T): boolean;
begin
  Result := (a < b);
end;


[dcc32 Error] TEST_PLATFORM.pas(62): E2015 Operator not applicable to this operand type


 
Эрик Теодор   (2014-07-09 16:38) [4]

http://www.tdelphiblog.com/2009/08/delphi-2009-win32-5.html#LV


 
Друг   (2014-07-09 16:53) [5]

> Эрик Теодор   (09.07.14 16:38) [4]

там нет про сравнение


 
Эрик Теодор   (2014-07-09 16:57) [6]


>
> там нет про сравнение


да мне просто потрепаться негде))

Эти синтаксис, соответственно, указывает, что T может быть заменен только на:
...
3) на порядковый (ordinal), число с плавающей точкой или запись (один ненулевой тип данных, следуя терминологии Delphi);


V-B. Зачем нужны ограничения?

"Я думал, что генерики предназначены для того чтобы использовать один код сразу для всех типов. Какой смысл в том, чтобы ограничивать используемые типы?"

Ну, ограничения позволяют компилятору получить больше информации об используемых типах. Например, ограничение , позволяет компилятору узнать, что для переменной типа Т, разрешается вызывать метод Free. А из ограничения > сделать вывод, что разрешается использовать Left.CompareTo (Right).


 
Друг   (2014-07-09 17:27) [7]

> Эрик Теодор   (09.07.14 16:57) [6]

Во-первых, там идёт контекст
Для того, чтобы наложить ограничение на обобщённый параметр, нужно написать

Мне не хочется писать какие-то ограничения
И что это вообще за ограничения "," и ">" ?

Во-вторых, я пробовал TMyGeneric<T: ordinal> = class
тоже ругается

Ну и наконец операция сравнения - стандартная операция, для структур можно  определить оператор. Нафига вообще эти IComparable?


 
Эрик Теодор   (2014-07-09 17:32) [8]


> Мне не хочется писать какие-то ограничения

а кто хочет? Вот у меня есть трусы - распрекрасного фасона и расцветки, но есть недостаток - их нельзя использовать как маечку. Пичалька


> Во-вторых, я пробовал TMyGeneric<T: ordinal> = class
> тоже ругается

а можть там "record" надо написать?


 
Друг   (2014-07-09 17:39) [9]

В общем ладно
Я думал дженерики работают как сишные макросы
А оказалось "чего не знаю, того не компилю"
Мне кажется сишные шаблоны такую ситуёвину скомпилируют

Блин, даже array[1..sizeof(T)] не работает
Это просто ахтунг


 
jack128_   (2014-07-09 20:24) [10]

if TComparer<T>.Default.Compare(a, b) < 0 then

но естественно это не работает например для рекордов с перекрытыми операторами сравнения. Да и вообще с рекордами.


 
jack128_   (2014-07-09 20:27) [11]


> Блин, даже array[1..sizeof(T)] не работает
> Это просто ахтунг

Да, шаблоны плюсовые конечно удобнее. Вообще дельфийская реализация самая худшая и из известных мне, даже в джаве возможностей больше.


 
Друг   (2014-07-10 10:28) [12]

> jack128_   (09.07.14 20:24) [10]
> if TComparer<T>.Default.Compare(a, b) < 0 then


посмотрел дизасм
там происходит просто ужас!

но всёравно спасибо
очень жаль в итоге


 
jack128_   (2014-07-11 09:46) [13]


> посмотрел дизасм
> там происходит просто ужас!

Дельфи и эффективный обобщенный код ??
"Нет, сынок. Это фантастика." (с) старая реклама


 
Очевидное   (2014-07-11 23:55) [14]

Дженерики - НЕ шаблоны.
И какая-то абстрактная "эффективность" тут совершенно не при чем.
Читайте же, наконец, хотя бы Википедию.
А то (ассемблер) смотреть научились, а понимать логику построения модулей и работы компилятора - нет.


 
jack128_   (2014-07-21 12:57) [15]


> Дженерики - НЕ шаблоны.

Ну да, эту матру все уже слышали не раз, а вот как объяснить чем же дельфийские дженерики лучше шаблонов - так никого.

Для NET"а все понятно, там дженерики можно в отдельных библиотеках распространять, но в дельфи то этого нельзя.

В результате мы имеет пересечение достоинств плюсов и нета, зато сумму их недостатков. Замечательно.



Страницы: 1 вся ветка

Текущий архив: 2016.02.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
2-1405311840
FIL-23
2014-07-14 08:24
2016.02.14
Createprocess как запустить приложение с параметрами


2-1406382986
tippa
2014-07-26 17:56
2016.02.14
куда уходит память?


6-1278956174
Виктор85
2010-07-12 21:36
2016.02.14
Декодирование канонизированного URL


15-1433179200
Pavelnk
2015-06-01 20:20
2016.02.14
Вот такая графическая задачка


15-1433362244
d2pak
2015-06-03 23:10
2016.02.14
P-CAD. Редактор УГО