Прочитал статью тут: https://wiki.freepascal.org/for-in_loop
Хочу сделать так же, чтобы можно было написать "for MyObj in MyCollection loop"
У меня есть объект-коллекция, что-то вроде такого:
- Код: Выделить всё
TMyObject = class
... // тут что-то есть
end;
TMyCollection = class
private
FItems: array of TMyObject; // ну или не массив, не важно
public
...
end;
Прочитал статью выше, самым простым способом показалось реализовать интерфейс IEnumerator. ОК, пробуем:
- Код: Выделить всё
TMyCollection = class(IEnumerator)
FItems: array of TMyObject; // ну или не массив, не важно
function GetCurrent: TObject;
function MoveNext: Boolean;
procedure Reset;
property Current: TObject read GetCurrent;
end;
Компилирую - получаю ошибку: No matching implementation for interface method QueryInterface <что-то там> found.
Нашел совет - добавить директиву "{$interfaces corba}". Добавил - не помогло.
Пока не сдаюсь и продолжаю искать, но советы приветствуются...
P. S. Только дописал пост, как обратил внимание, что в статье выше написано, что "Where IEnumerator is declared as: "
- Код: Выделить всё
IEnumerator = interface(IInterface)
А у меня, когда делаю ctrl+click на интерфейсе, написано
- Код: Выделить всё
generic IEnumerator<T> = interface
Вот теперь я окончательно запутался.
![Cool 8)](./images/smilies/icon_cool.gif)