Грабли с Generics.Collections

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Awigro
незнакомец
Сообщения: 1
Зарегистрирован: 10.01.2024 13:27:26

Грабли с Generics.Collections

Сообщение Awigro »

Добрый день. Разбираюсь с Lazarus, в нем я совсем новичек.

Код: Выделить всё

Var
 d:TDictionary<String, Integer>;
begin
 d := TDictionary<String, Integer>.Create();
 d.Free();
end;
Вот такой код отлично компилируется, но с предупреждениями:
generics.dictionaries.inc(191,92) Warning: Constructing a class "TCustomDictionaryEnumerator$4$crc04FA9CCF" with abstract method "DoMoveNext"
generics.dictionaries.inc(191,92) Warning: Constructing a class "TCustomDictionaryEnumerator$4$crc04FA9CCF" with abstract method "GetCurrent"

Подскажите пожалуйста на что конкретно ругается компилятор и как это исправить ?
Спасибо.
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Awigro писал(а): Подскажите пожалуйста на что конкретно ругается компилятор и как это исправить ?
Ругается он (совершенно справедливо) на такие вот хитровывернутые конструкции:

Код: Выделить всё

function TDictionaryEnumerable<TDictionaryEnumerator, TDictionaryPointersEnumerator, T, CUSTOM_DICTIONARY_CONSTRAINTS>.DoGetEnumerator: TDictionaryEnumerator;
begin
  Result := TDictionaryEnumerator(TDictionaryEnumerator.NewInstance);
  TCustomDictionaryEnumerator<T, CUSTOM_DICTIONARY_CONSTRAINTS>(Result).Create(FDictionary);
end; 
Понятно, что исправить это можно только изменив исходники Generics.Collections, на gitlab уже скоро год как висит ишью.
Но энумераторы же работают - зажать нос и забить на варнинги.
Ответить