Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Impulser2000
0 / 0 / 0
Регистрация: 06.03.2015
Сообщений: 7
#1

Generic IComparable - Delphi

13.12.2015, 11:37. Просмотров 277. Ответов 5
Метки нет (Все метки)

Че в делфи совсем все туго? У меня сейчас есть record с разными методами и мне надо сделать функцию для "обрезки" IComparable<T>:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
TExtensions = record
  public
    class function Clamp(const AVal, AMin, AMax: Byte): Byte; overload; static; inline;
    class function Clamp(const AVal, AMin, AMax: TTimeSpan): TTimeSpan; overload; static; inline;
  end;
{...}
{ TExtensions }
 
class function TExtensions.Clamp(const AVal, AMin, AMax: Byte): Byte;
begin
  if (AVal < AMin) then
    Result := AMin
  else if (AVal > AMax) then
    Result := AMax
  else
    Result := Aval;
end;
 
class function TExtensions.Clamp(const AVal, AMin, AMax: TTimeSpan): TTimeSpan;
begin
  if (AVal < AMin) then
    Result := AMin
  else if (AVal > AMax) then
    Result := AMax
  else
    Result := Aval;
end;
В шарпе это так:
C#
1
2
3
4
5
6
public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
{
    if (val.CompareTo(min) < 0) return min;
    else if(val.CompareTo(max) > 0) return max;
    else return val;
}
Так вот мне надо сделать как в шарпе. Привествую любую помощь, плюсы гарантирую!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2015, 11:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Generic IComparable (Delphi):

Generic с условием - Delphi
Здравствуйте, хотелось бы спросить знатоков, возможно ли повторить данный код C# в Delphi private void ShowWindow&lt;T&gt;(ref T...

Спецификация generic upcast/downcast в generic типах - C#
Почему только интерфейсы и делегаты в C# поддерживают технику ковариантности и контрвариантности в Generic типах?

IComparable - C++
С++ только начал изучать Знаю, что в С# легко можно реализовать интерфейс IComparable для своего класса, чтобы потом не мучиться с...

.NET 4.x Сортировка и IComparable - C#
Всем добрый вечер || день. Возник вопрос по поводу компаратора. У меня есть класс, который имеет два поля - Key и Value Мне...

LINQ и IComparable - LINQ
Здравствуйте. Мне нужно написать свой специфический CompareTo. Это связано с тем, что одно из значений нужно проверять на не Null перед...

IComparable<T> и BinarySearch() - C#
Господа, моя пятая точка соизволила гореть, все не как не могу понять ...

5
mss
2599 / 2255 / 250
Регистрация: 24.12.2010
Сообщений: 13,726
13.12.2015, 13:17 #2
Цитата Сообщение от Impulser2000 Посмотреть сообщение
в делфи совсем все туго?
В Делфи все замечательно, не "тужее" чем в шарпах)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
  TExtensions<T: IComparable<T>> = record
    class function Clamp(const AVal, AMin, AMax: T): T; overload; static; inline;
  end;
 
class function TExtensions<T>.Clamp(const AVal, AMin, AMax: T): T;
begin
  if AVal.CompareTo(AMin) < 0 then
    Result := AMin
  else if AVal.CompareTo(AMax) > 0 then
    Result := AMax
  else
    Result := Aval;
end;

Не по теме:

Цитата Сообщение от Impulser2000 Посмотреть сообщение
плюсы гарантирую
на хлеб их не намажешь, а для иного они годятся разве что в сортир на гвоздик)

0
Sigin
13.12.2015, 13:19
  #3

Не по теме:

mss, там же Byte, TTimeSpan, разве они реализуют IComparable<Byte> и IComparable<TTimeSpan> соответственно?

0
mss
2599 / 2255 / 250
Регистрация: 24.12.2010
Сообщений: 13,726
13.12.2015, 13:36 #4
nestquik2, для необъектных типов можно их делегаторы реализовать с торчащими наружу IComparable
0
Sigin
220 / 220 / 69
Регистрация: 20.10.2013
Сообщений: 808
Завершенные тесты: 4
13.12.2015, 13:40 #5
mss, ТСу наверное будет проще просунуть TComparer<T>.Default?
0
mss
2599 / 2255 / 250
Регистрация: 24.12.2010
Сообщений: 13,726
13.12.2015, 13:44 #6
ну можно и так
0
13.12.2015, 13:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2015, 13:44
Привет! Вот еще темы с ответами:

.NET 4.x IComparable, ArrayList.Sort - C#
При вызове Sort вылетает ошибка &quot;Дополнительные сведения: Сбой при сравнении двух элементов массива.&quot;. Не могли бы вы объяснить, в чем...

По поводу icomparable interface - C#
public int CompareTo(object obj) { if (obj is Person) { Person otherPerson = obj as Person; return this.Age - otherPerson.Age; ...

.NET 4.x Интерфейс IComparable, метод CompareTo - C#
public class Car:IComparable { public int CarID { get; set; } public int CurrentSpeed { get; set; } public...

Верно ли, что ArrayList не реализует IComparable<T>? - C#
Доброго времени суток, уважаемые форумчане. Сегодня писал небольшую учебную программу. В ней реализовывал интерфейс IComparable&lt;T&gt;. С...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru