|
|
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 19:34 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey в хелпере оператор декларировать нельзя Но, если переключиться в диалект FPC, то можно декларировать глобальные операторы, и таким образом закрыть и этот вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 20:02 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Для наглядности сделал ещё метод ToString. Операторы вынес в отдельный модуль с диалектом FPC, написал тайпхелперы с методом ToString для используемых типов (они тоже в отдельном модуле). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 20:27 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ авторТо есть типа через TComparer<T>.Default было сложнее, да? ) Я просто не понял как это делать, а когда попробовал сделать функцию Random через дженерики снова наступил на те-же грабли и просто бросил. Если не сложно, то покажите на моем конечном коде, как это будет через дженерики. Я не знаю как работают шаблоны в С++ Но я знаю, что в Delphi под T может быть любой тип, в том числе такой, для которого нет операторов сравнения Поэтому то, что ты ожидаешь в Delphi не работает С другой стороны есть дефолтный компаратор X-Cite показал отличный пример, как его юзать. Я бы только проинициализировал его в классовом конструкторе. Но это детали Если интересует высокая производительность - то великолепный пример показал Казанцев Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 22:33 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. Чего-то не выходит каменный цветок. Не хочет работать такая конструкция в XE 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 03:02 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Если интересует высокая производительность - то великолепный пример показал Казанцев Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 03:26 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
rgreat, Не уверен - проверь. Например, первый кейс дельфя должна развернуть, задействовав под каждый из типов только одну ветку кода, т.к. интринсинк GetTypeKind резолвится в компайлтайме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 04:08 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
юю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 05:34 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Код Код: pascal 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. Чертез TComparer<T>.Default - 188 мс. Через GetTypeKind(T) - 301 мс. 62% Через компайрер вышло на треть быстрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 05:41 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
В 64-х битах разница меньше, но все одно 77%. Delphi 10.4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 05:43 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
rgreat, Отличный тест Код: pascal 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 11:19 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, плюсик! тебе в карму )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 11:31 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, Ееееее ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 11:35 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
rgreat Через компайрер вышло на треть быстрей. Во-первых, ты изменил задачу. ТС сравнивает вхождение числа в диапазон, ты же делаешь только одно сравнение, чем ставишь компарер в более выгодные условия. Во-вторых, тестируешь только заведомо худший вриант для ручной реализации. Если вернуть задачу к первоначальному варианту и сравнивать вхождение числа, то вариант с компарером для типа Integer, будет ни чем не лучше ручного варианта (который не самый оптимальный), а для типа Int64 будет хуже. А что будет при оптимизированном ручном варианте, уже показали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 12:10 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
И нужно понимать, что речь даже не столько о производительности была, сколько об "удобстве" дельфийских дженериков. Тут ещё хорошо, что требуется только банальное сравнение, для которого у дельфей есть готовая реализция, а если потребуется что-то более сложное, то всё равно придётся всё пилить руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 12:17 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Так извращаться только ради того что бы получить сравнимую производительность с дефолтом. Извращенцы. Вы еще на ассемблер это все перепишите. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 15:48 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
rgreat, Ассемблер в дженериках не работает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 15:54 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, А ты залинкуй через указатели! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 15:54 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
rgreat, Но вообще я изначально за дефолтный компаратор был Это ты про производительность ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 15:55 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU это ты про производительность ) Ы-ы-ы-ы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 15:58 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
rgreat, А кто тесты начал фигачить ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 16:09 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Меня заставили. Это все вы виноваты! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 16:11 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ Код: pascal 1. Чего-то не выходит каменный цветок. Не хочет работать такая конструкция в XE 10 Должна вроде, что пишет то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2021, 17:56 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40033061&tid=2037738]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 304ms |

| 0 / 0 |
