[fpc-devel] Thoughts on being able to declare "pointer-to-type"	parameters directly in method signatures?
    denisgolovan 
    denisgolovan at yandex.ru
       
    Mon Jun 10 09:09:50 CEST 2019
    
    
  
> You can do it like this (yes, works in mode Delphi as well):
> 
> === code begin ===
> 
> {$mode objfpc}
> {$modeswitch advancedrecords}
> 
> type
> generic TPointerType<T> = record
> public type
> PT = ^T;
> end;
> 
> generic procedure MemCopy<T>(Dest, Src: specialize
> TPointerType<T>.PT; Len: PtrUInt);
> begin
> while Len > 0 do begin
> Dest^ := Src^;
> Inc(Dest);
> Inc(Src);
> Dec(Len);
> end;
> end;
> 
> type
> String4 = String[4];
> 
> var
> X: specialize TArray<String4> = ('AAAA', 'BBBB', 'CCCC', 'DDDD', 'EEEE');
> Y: specialize TArray<String4> = ('', '', '', '', '');
> S: String4;
> 
> begin
> specialize MemCopy<String4>(@Y[0], @X[0], 5);
> for S in Y do WriteLn(S);
> end.
> 
> === code end ===
> 
> Regards,
> Sven
Maybe we can get generic aliases instead?
I mean 
type
  generic TPtr<T> = ^T;
... then put TPtr into some FPC system unit and at least provide one single common type instead of re-inventing it in each separate library?
It'll be at least something like:
  generic function Test<T>( ptr: TPtr<T>);
I mean we already have TArray<T>, right?
-- 
Regards,
Denis Golovan
    
    
More information about the fpc-devel
mailing list