Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2016.02.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
Друг   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.001 c
15-1433362244
d2pak
2015-06-03 23:10
2016.02.14
P-CAD. Редактор УГО


2-1405621661
sanya_m
2014-07-17 22:27
2016.02.14
Удаление из TADOQuery записей


2-1406532286
Dmitry
2014-07-28 11:24
2016.02.14
Как в QuickReport открить отчет для просмта сразу в Preview


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


2-1404906872
Друг
2014-07-09 15:54
2016.02.14
Операция сравнения в дженериках





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский