Прочитал статью тут: 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
Вот теперь я окончательно запутался.
 Спасите...
 Спасите...


 Теперь буду пробовать второй. Уже после того, как пост написал, нашел еще один пример (ссылка осталась дома на домашнем компе, сейчас с работы пишу). Он и выглядит еще короче и проще, и там полный пример - полностью написанная программа, которую запустить можно. Попробую, напишу потом, что получилось.
 Теперь буду пробовать второй. Уже после того, как пост написал, нашел еще один пример (ссылка осталась дома на домашнем компе, сейчас с работы пишу). Он и выглядит еще короче и проще, и там полный пример - полностью написанная программа, которую запустить можно. Попробую, напишу потом, что получилось.