|
|
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Делаю простенькую штуку и получаю ошибку компиляции: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И как это правильно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2020, 23:40 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ И как это правильно сделать? В Delphi - через боль и страдание. В FPC - легко и просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 01:16 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ, Посмотри что-то типа TComparer<T>.Default ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 01:44 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Можно поподробней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 01:44 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Подробнее о боли или о лёгкости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 01:47 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
авторПосмотри что-то типа TComparer<T>.Default Действительно боль, проще с вариантами сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 01:49 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, До твоего комментария я думал, что в FPC как раз всё печально ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 02:05 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ, пробуй так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 02:09 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU До твоего комментария я думал, что в FPC как раз всё печально ) В FPC всё естественно, без компареров, тайпкайндов и прочего дельфийского секса. Обсуждалось уже, читать можно, примерно, отсюда . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 02:16 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Пробежался, так и не понял Как на FPC решить вопрос ТС? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 02:21 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Как на FPC решить вопрос ТС? Да вот как у него код написан, так и решить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 02:27 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Забил я на дженерики, сделал через вариант: Код: 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. Использование: Код: pascal 1. 2. 3. 4. 5. Результат: 17 0,468 04.01.2021 21:56:06 08.01.2021 19:36:20 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 13:26 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ Забил я на дженерики давно пора от этой ереси избавиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 13:34 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
defecator Страдалецъ Забил я на дженерики давно пора от этой ереси избавиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 13:44 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ, То есть типа через TComparer<T>.Default было сложнее, да? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 13:46 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
авторТо есть типа через TComparer<T>.Default было сложнее, да? ) Я просто не понял как это делать, а когда попробовал сделать функцию Random через дженерики снова наступил на те-же грабли и просто бросил. Если не сложно, то покажите на моем конечном коде, как это будет через дженерики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 17:27 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ, Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 17:32 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 17:42 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ Если не сложно, то покажите на моем конечном коде, как это будет через дженерики. Если быстро, то так: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 18:24 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Спасибо. Уже понятнее. Есть от чего оттолкнуться. Kazantsev Alexey - спасибо конечно, но это уже изврат, дженерики должны упрощать жизнь, а не глумится над кодером :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 18:52 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Страдалецъ дженерики должны упрощать жизнь, а не глумится над кодером :) В FPC упрощают. А в дельфе - добро пожаловать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 18:57 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Все бы хорошо, но в FPC генерики будут выдавать ошибки не на этапе компиляции как в дельфе, а во время работы ПО. С этой точки зрения использование Comparer<T>.Default.Compare вместо прямого кода сравнения выглядит не столь ужасно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 19:01 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
rgreat но в FPC генерики будут выдавать ошибки не на этапе компиляции как в дельфе, а во время работы ПО Ну что за глупости... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 19:03 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
rgreat, Смотри: Вариант для байта и строки откомпилировался, а на варианте с TVarData получили ошибку компиляции т.к. для TVarData не определён оператор сравнения. Если сейчас написать тайпхелпер с перегруженным оператором сравнения для TVarData, то и третий вариант откомпилируется. Круто, да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 19:14 |
|
||
|
Generics, а собственно как сравнить элементы <T> ?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Если сейчас написать тайпхелпер с перегруженным оператором сравнения для TVarData, то и третий вариант откомпилируется. Хотя нет, в хелпере оператор декларировать нельзя. Но, с любыми другими методами это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2021, 19:26 |
|
||
|
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/search_topic.php?author=sqI.ru&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
91ms |
get tp. blocked users: |
1ms |
| others: | 1301ms |
| total: | 1646ms |

| 0 / 0 |
