Здравствуйте, Khimik, Вы писали:
K>Меня сейчас чуть смущает: в Delphi интерфейсы это же com, значит лишние сложности и тормоза?
Сложностей нет. Когда будет тормозить профилирование покажет где. Очень сомневаюсь что узким местом будет мехнанизм интерфейсов.
У IUnknown всего 3 метода QueryInterface _AddRef и _Release первый преобразует типы, и два метода увеличить кол-во ссылок и уменьшить на один. Как только кол-во ссылок равно 0 он вызывает деструктор и освобождает память. И delphi под капотом сама расставляет вызовы AddRef и Release.
Если пугают интерфейсы сделайте на абстрактном классе.
...
uses SysUtils;
...
type
TStateGen=class
function Next(var state:TState);virtual;abstract;
end;
TGenAll=class(TStateGen)
function Next(var state:TState);override;
...
...
gen:=mkGen(src);
while gen.Next(item) do begin
showState(item);
end;
FreeAndNil(gen);
...