|
|
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Доброй ночи! Кто хорошо разбирается в дженериках? Хотеть сделать такое: Код: pascal 1. А оно мне такое: [dcc32 Error] E2021 Class type requiredАга, думаю, ну да, я ж ему не указал что под "T" могут быть только классы... Как оно там пишется... Код: pascal 1. Теперь под "T" может быть задан только класс. Но оно мне всё равно такое же: [dcc32 Error] E2021 Class type requiredТак, думаю, какой там ещё вариант был, вроде конкретный класс указать (типа под "T" могут быть только его потомки)? Код: pascal 1. А вообще хрен: [dcc32 Error] E2510 Type 'TObject' is not a valid constraintНельзя самый базовый? Ачёйта? Странно... Ну ок, скопируем для начала как в примере из доков: Код: pascal 1. Вот уже с TComponent пускает, но в правой части возвратилося: [dcc32 Error] E2021 Class type required Ну и что за чушь? Я же явно прописал, что "T" это будет класс. Что же ему не так? Как-то можно обойти? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 02:13 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Нужно что бы класс поддерживал дженерики типа TList и тогда ты сможешь написать Код: pascal 1. 2. 3. 4. 5. 6. Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 03:00 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
а вопрос-то в чём? переформулируй что ты хочешь получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 08:42 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Cobalt747, java насмотрелся где есть extends \ super ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 08:50 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Почему то всё заработало, решил попробовать Чё это оно не работает Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 08:56 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. Здесь "TTest<T>.Test" какое Т имеется в виду, это: "<T: TForm1>" или это "<string, T>"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 09:55 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Uridian, Второго. То есть если упростить Код: pascal 1. То мы задаём, что можно создать генерик только из классов, в которых входит предок TObject ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 10:03 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Cobalt747 переформулируй что ты хочешь получить ResourceSpace, Код: pascal 1. не спасет ОРД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 11:58 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный, спасибо за ответы! Код: pascal 1. Так пропускает, да, но тогда оно не является потомком TForm1. Код: pascal 1. Я понимаю что вы просто для примера отредактировали предыдущий код, но как я уже писал в первом посте, именно такое уже чё-то не компилится. :) [dcc32 Error] E2510 Type 'TObject' is not a valid constraint _Vasilisk_, хелперы я знаю, но увы не подходят. Во-первых хелпер же у класса может быть только один. А во-вторых мне-таки нужны поля (в том числе типа "T"). Мне нужно чтоб получился именно потомок от "T", чтоб всякие "is" и "as" это подтверждали. Технически он ругается только на то что "T" по его мнению всё ещё может оказаться не классом. Как бы ему втолковать-то, что "всё ok, это точно класс"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 13:50 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ResourceSpace, Никак... Нельзя наследоваться от неизвестно чего. Когда мы говорим о Код: pascal 1. 2. 3. Предполагается, что Т - это какой то неизвестный тип, который используется внутри класса. Код: pascal 1. 2. 3. 4. 5. То что вы хотите, даже не понятно как представить... Какова ваша цель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 14:45 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ResourceSpace хелпер же у класса может быть только один. ResourceSpace А во-вторых мне-таки нужны поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 15:31 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
X-Cite Предполагается, что Т - это какой то неизвестный тип, который используется внутри класса. Код: pascal 1. 2. 3. 4. 5. Какова ваша цель? Предполагаю что он хочет расширить возможности TMyType<T> через наследование, но при этом ограничить T только классами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 16:24 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
alekcvp, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 16:40 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
X-Cite Нельзя наследоваться от неизвестно чего. X-Cite Предполагается, что Т - это какой то неизвестный тип, который используется внутри класса. alekcvp ... , но при этом ограничить T только классами. Перечитываю документацию, и там есть такой раздел как "Generics Constraints". Так что я уже ограничил "T" только классами - так что хотя это всё ещё и "неизвестно чего", но уже "точно класс". Только вот конструкция "class(T)" почему-то осталась просто не в курсе ограничения "<T: class>". _Vasilisk_ хелперы можно наследовать друг от друга ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 17:30 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ResourceSpace, В справке http://docwiki.embarcadero.com/RADStudio/Sydney/en/Class_and_Record_Helpers_(Delphi) авторThe syntax for declaring a class helper is: type identifierName = class|record helper [(ancestor list)] for TypeIdentifierName memberList end; The ancestor list is optional. It can be specified only for class helper. Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 17:37 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
X-Cite alekcvp, Код: pascal 1. 2. Это? Думаю это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 20:07 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Упс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 20:10 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
о... Так вот что/зачем такое "ancestor list"...))))) Описание конечно супер: "Не является обязательным. Может указываться только для хелперов." Класс!) Вроде работает))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 21:37 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Правда возникает вопрос: а как узнать имя ancestor'а если это не наш же, а какой-нибудь чужой (например системный) хэлпер - они как предлагают узнавать его имя..? alekcvp Думаю это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 21:40 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Поспешил... Работает, но тока для "class", а вот для "record": Код: pascal 1. 2. 3. 4. 5. Чё-то уже хрен вам: [dcc32 Error] E2029 ',' or ':' expected but '(' found [dcc32 Error] E2029 ';' expected but 'FOR' found [dcc32 Error] E2029 ',' or ':' expected but 'END' foundУ этого Эмберберо всё блин не слава богу... :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2020, 21:49 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ResourceSpace Правда возникает вопрос: а как узнать имя ancestor'а если это не наш же, а какой-нибудь чужой (например системный) хэлпер - они как предлагают узнавать его имя..? ResourceSpace Поспешил... Работает, но тока для "class", а вот для "record": ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 12:32 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ResourceSpace alekcvp Думаю это. Подозреваю что это нереально, т.к. получается класс с разными типами конструкторов, в зависимости от T. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 14:38 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ResourceSpace Как-то можно обойти? Можно радикально - сменить компилятор. Free Pascal так умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 14:52 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный, Код: pascal 1. 2. 3. 4. Здесь TTest - наследник TObjectDictionary, а в случае Код: pascal 1. некоторого, непонятно какого класса (тип которого еще требуется инстанцировать). И ошибка компиляции закономерна. И это, по большому счету, сделано в Delphi разумно и правильно (в отличие от того что допустимо в FreePascal, см.: Kazantsev Alexey ResourceSpace Как-то можно обойти? Можно радикально - сменить компилятор. Free Pascal так умеет. То что вы хотите как раз и позволяют сделать хелперы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 15:45 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
kapas То что вы хотите как раз и позволяют сделать хелперы Хелперы в дельфях это хелперы курильщика (как и дженерики). Хелперы здорового человека, опять же, во Free Pascal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 15:51 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Kazantsev AlexeyХелперы в дельфях это хелперы курильщика (как и дженерики). Хелперы здорового человека, опять же, во Free Pascal. А поподробнее можно...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 16:48 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
kapas А поподробнее можно...? Хелпер в дельфях перекрывает собою любые другие, во Free Pascal они объединяются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 16:53 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Наследование class helper'ов есть. Вполне себе хорошо работает. Об этом уже выше было сказано. Что касается record helper'ов - это так необходимо? К тому же это в Delphi сделать возможно: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 17:20 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
kapas Наследование class helper'ов есть Речь не о наследовании. Один хелпер в одном модуле, другой в другом. Подключаем оба модуля... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 17:33 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Речь не о наследовании. Один хелпер в одном модуле, другой в другом. Подключаем оба модуля... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 17:51 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Создай тикет в ембаркадере. Проголосуем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 17:52 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
kapas ошибка компиляции закономерна alekcvp получается класс с разными типами конструкторов Kazantsev Alexey Free Pascal так умеет. Проверил на 2.0.4 - хоть и аналогично ругается (плюс нафик ломаются выпадающие подсказки), но при этом при сборке спокойно компилирует и всё работает как задумывалось)) Красафчики, просто красафчики!) Всегда на шаг впереди)) _Vasilisk_ Смотреть исходники _Vasilisk_ ...only for class helper... но... Но тогда это какая-то официальная лажа... Допустим мне требуется свой хэлпер для String, при этом не повреждая системный TStringHelper... И мне официально запрещают сделать??: Код: pascal 1. Не говоря уже про несколько разных из разных модулей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 17:56 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
white_nigger Странный класс, к которому вынуждены лепить кучу хелперов... Ничего странного. Просто ситуации бывают разными. rgreat Создай тикет в ембаркадере. А уже есть, вроде. Надо будет поискать. ResourceSpace Проверил на 2.0.4 Это же релиз 2006 года. Раритет, однако. Последний релиз 3.2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 18:08 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ResourceSpace alekcvp получается класс с разными типами конструкторов Когда объявишь класс - да, а если ты объявишь процедуру, которая принимает твой класс и создаёт его динамически внутре - откуда компилятору узнать какой конструктор надо вызывать, сколько у него параметров и т.п.?.. Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 18:18 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
kapas сделать возможно Долго писал пост, не видел этого сообщения. Сейчас изучим... Но выглядит больше как какой-то хак... Kazantsev Alexey Раритет, однако. Не, это Lazarus'а версия, пардон что запутал. :) А сам FPC - 3.0.4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 18:19 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
ResourceSpace, 1. ResourceSpaceОшибка компиляции не закономерна, так как гласит не "что-то не так с разными типами конструкторов" - а "тут должен быть класс", когда это как раз-таки и есть класс. Подумайте лучше, что будет если то о чем здесь говорилось будет реализовано в языке: как вы будете, например, решать проблему с конфликтов имен методов, или рекурсией при определении класса (скажем вот так TClassA = class(TNewType<TClassA>)...end; // некоторые "разработчики" могут захотеть такой "красоты" :-))) Я подозреваю что здесь еще существуют проблемы с реализацией такой конструкции в компиляторе... 2. Код: pascal 1. Что мешает сделать как я писал выше: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. или нужно чтобы было красиво? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 18:28 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey rgreat Создай тикет в ембаркадере. А уже есть, вроде. Надо будет поискать. Нашёл, можно голосовать: https://quality.embarcadero.com/browse/RSP-13340 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 18:43 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Оказывается - уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 20:22 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
white_nigger Kazantsev Alexey Речь не о наследовании. Один хелпер в одном модуле, другой в другом. Подключаем оба модуля... Если хелперы рассматривать как методы расширений, то самое то... Есть какой нибудь TStream а к нему 150 фреймворков могут добавлять свои расширения, какие подключил, такие и получил возможности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2020, 22:01 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
X-Cite Есть какой нибудь TStream а к нему 150 фреймворков могут добавлять свои расширения, какие подключил, такие и получил возможности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2020, 03:54 |
|
||
|
Generics, как объявлять класс-потомок от заданного T?
|
|||
|---|---|---|---|
|
#18+
white_nigger, Я в аналогию привожу IServiceCollection в .Net Core Ставишь какой-нибудь фреймворк а-ля Swagger Добавляется .AddSwagger() В котором уже инкапсулирован код регистрации в IServiceCollection... В Delphi отличный пример для TFiled Например лежит в базе какой-нибудь Блоб... Но ты знаешь четкую его структуру... И вместо того чтобы писать AsStream и еще код по преобразованию в собственную модель, можно реализовать расширение(хелпер) AsMyModel И таких добавлений может быть сколько угодно много... Например подключил работу с JPEG - появился AsJpeg Подключил работу с RAW - появился AsRaw Это же удобно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2020, 12:56 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038085]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 369ms |

| 0 / 0 |
