On 02.12.2016 08:22, Ryan Joseph wrote: > Yes but the problem is doing this with generics. :) That’s where I got stuck > and I don’t think it’s possible.
Ah, yes, right, sorry. Attached is a corrected version :) Regards, Sven
program trecenum; {$mode objfpc} {$modeswitch advancedrecords} type generic TRec<T> = record public type TArrayType = array of T; TEnumerator = object private fArr: TArrayType; fIndex: Integer; function GetCurrent: T; public constructor Create(aArr: TArrayType); function MoveNext: Boolean; property Current: T read GetCurrent; end; public arr: TArrayType; function GetEnumerator: TEnumerator; end; constructor TRec.TEnumerator.Create(aArr: TArrayType); begin fArr := aArr; fIndex := -1; end; function TRec.TEnumerator.GetCurrent: T; begin Result := fArr[fIndex]; end; function TRec.TEnumerator.MoveNext: Boolean; begin Inc(fIndex); Result := fIndex < Length(fArr); end; function TRec.GetEnumerator: TRec.TEnumerator; begin Result.Create(Self.arr); end; type TRecLongInt = specialize TRec<LongInt>; TRecString = specialize TRec<String>; var rl: TRecLongInt; rs: TRecString; i: LongInt; s: String; begin rl.arr := TRecLongInt.TArrayType.Create(42, 53, 96, 29); rs.arr := TRecString.TArrayType.Create('Alpha', 'Beta', 'Gamma', 'Delta'); for i in rl do Writeln(i); for s in rs do Writeln(s); end.
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal