|
|
|
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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39986872&tid=2038085]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 467ms |

| 0 / 0 |
