Yeap! That is actually what I posted here (Feature Request)
<https://gitlab.com/freepascal.org/fpc/source/-/issues/40578>.
You simply need to inherit from the list class so that you can make
the function public. And with a little trick you can also use it
inside a for-in-loop:
=== code begin ===
program tlistitr;
{$mode objfpc}{$H+}
{$modeswitch advancedrecords}
uses
Generics.Collections;
type
TRec = record
a, b, c: Int64;
constructor Create(aArg1, aArg2, aArg3: Int64);
end;
{ this way the GetPtrEnumerator function is available; you could
also use a class helper }
TMyList = class(specialize TList<TRec>)
public
function GetPtrEnumerator: specialize TEnumerator<PT>;
end;
constructor TRec.Create(aArg1, aArg2, aArg3: Int64);
begin
a := aArg1;
b := aArg2;
c := aArg3;
end;
function TMyList.GetPtrEnumerator: specialize TEnumerator<PT>;
begin
Result := inherited GetPtrEnumerator();
end;
{ with this you can simply do "for PtrTypeVar in List.GetPtrEnumerator
do",
though this *might* not work in mode Delphi... }
operator Enumerator(aEnum: specialize TEnumerator<TMyList.PT>):
specialize TEnumerator<TMyList.PT>;
begin
Result := aEnum;
end;
var
l: TMyList;
r: TRec;
p: TMyList.PT;
begin
l := TMyList.Create;
l.Add(TRec.Create(1, 2, 3));
l.Add(TRec.Create(9, 8, 7));
for p in l.GetPtrEnumerator do begin
Writeln(p^.a, ' ', p^.b, ' ', p^.c);
end;
end.
=== code end ===
Regards,
Sven
_______________________________________________
fpc-pascal maillist -fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal