If you want to pass a pointer to ^T in a generic function is there anyway safe 
to do this currently? Pascal doesn’t allow ^ types in function arguments (why?) 
and generics don’t seems to support pointers either (why?).

  generic TValues<T> = array[0..0] of T;
  generic PValues<T> = ^specialize TValues<T>;

I guess the only thing to do is use a untyped pointer and cast it to the 
correct type inside the function declaration?

For example here is a generic QuickSort function which operates on any array of 
T.

type
  generic TComparator<T> = function (left: T; right: T; context: pointer): 
integer;

generic procedure QuickSort<T>(_values: pointer; first, last: LongInt; 
comparator: specialize TComparator<T>);
type
  TValues = array[0..0] of T;
  PValues = ^TValues;
var
  pivot,j,i: integer;
  temp: T;
  values: PValues absolute _values;

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to