[fpc-pascal] about dynamic array

cobines cobines at gmail.com
Fri May 7 16:10:37 CEST 2010


2010/5/7 spir ☣ <denis.spir at gmail.com>:
> I cannot directly "fish" and use the pointer's target. Seems I always need to pass _via_ the pointer, then all is fine. It's not really annoying. But I don't understand the difference: in code, both versions are indeed strictly equivalent. I guess there's an implicit (pointer?) conversion somewhere?
> Are there cases where the pointer's mediation is not needed?

There is an implicit conversion when you assign p := l[0], which is
PInteger := Pointer.

TFPList uses untyped Pointer for storage. You would need to make a
descendant class of TFPList and change methods to use PInteger (at
least for Items property and Get, Put methods). Then use this new
class specialized for storing PIntegers instead of TFPList.

Or take a look at generics in FPC. There is a generic class TFPGList
defined in unit "fgl". Use it like this:

uses
   fgl;
type
   TPIntegerList = specialize TFPGList<PInteger>;
var
       l : TPIntegerList;
       i : Integer;
       p : ^Integer;
begin
       l := TPIntegerList.Create;
       i := 1 ; new(p) ; p^ := i; l.Add(p);
       p := l[0] ; writeln(p^);
       writeln(l[0]^);                 // no error
end.

--
cobines



More information about the fpc-pascal mailing list