![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Matematik |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
Наткнулся на интересное поведение компилятора.
Вот класс "шаблона":
Бац и ошибка компиляции - Left side cannot be assigned to ?! List - это у класса TList<T> (System.Generics.Collections.pas)
Вот тоже самое, но без шаблона:
Так компилируется и работает. Вопрос: почему так? Спасибо. Добавлено @ 14:17 Забыл, windows компилятор 32битный XE4 Update1 Это сообщение отредактировал(а) Matematik - 10.8.2013, 14:18 |
||||||
|
|||||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Так не пойдёт? -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
Пойдет конечно, еще можно через указатель получить доступ
Но вопрос не как обойти, а почему оно ведет себя так странно? Должно же быть логическое объеснение, например, "баг в компиляторе" ))) |
|||
|
||||
| Illusion Dolphin |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Через указатель можно куда угодно доступ получить
У лист есть getter и setter. Оно возвращяет и принимает TPair<string,T>, и ничего другого. И в такой конструкции надо присвоить не TPair<string,T>, а его часть, чего компилятор не умеет. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||
|
|||||||
| Matematik |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
Немного не так
Getter\setter есть у Items, да, ему невозможно сделать так
А List - это почти прямой доступ к массиву
И код работает
но только для обычного класса, а не шаблона. |
||||||
|
|||||||
| Illusion Dolphin |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
К сожалению, generics в делфи не такие мощные, как в c++/c#, там можно горы свернуть, тем более там есть lambda, linq... А компилятор делфи идёт своим путём Добавлено @ 22:49 Кстати в c# такое не работает
Ошибка там почти такая же, но лаконичнее описана, имхо.
Это сообщение отредактировал(а) Illusion Dolphin - 10.8.2013, 22:50 -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |