On Tue, 3 Sep 2019 12:15:50 +0200 Marco van de Voort <f...@pascalprogramming.org> wrote:
> I'm trying to let an iterator implement the enumerator pattern and > return itself, but for that I need to use the type of the generic: > > generic THashmapIterator<TKey, TValue, T, TTable>=class > public > type PValue=^TValue; > > // make type alias > > TIteratorType = generic THashmapIterator<TKey, > TValue, T, TTable>; Inside the generic the templates are normal types: TIteratorType = specialize THashmapIterator<TKey, TValue, T, TTable>; > > var > Fh,Fp:SizeUInt; > FData:TTable; > function Next:boolean;inline; > function MoveNext:boolean;inline; > function Prev:boolean;inline; > function GetData:T;inline; > function GetKey:TKey;inline; > function GetValue:TValue;inline; > function GetMutable:PValue;inline; > procedure SetValue(value:TValue);inline; > function getenumerator : TIteratorType ; > property Data:T read GetData; > property Key:TKey read GetKey; > property Value:TValue read GetValue write SetValue; > property MutableValue:PValue read GetMutable; > property Current : T read GetData; > end; > No repetition of templates in mode objfpc: function THashmapIterator.getenumerator : TIteratorType ; > begin > > result:=self; > > end; > > but the I can't find a TIteratorType definition that is accepted. Can > some of the objfpc generics buffs reveal the secret how to do this? > > Do I need to nest the iterators first, like in Delphi, and if so will > ($modeswitch advancedrecords} allow this? Mattias _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel