Hey guys, I was thinking about how nice generic type helpers would be today and remembered I did a mostly functional branch over 6 months ago so I fixed it up and posted it on gitlab. There’s a nasty merge error with main I need to fix but you can test it anyways.
For the helper type I supported: single types, dynamic arrays, static arrays, sets and classes and records. Is this acceptable how I did it? I never know. :) The main strange thing is supported compound types in helper types (like “array of T” or "generic TMyHelper<T> = class helper for specialize TMyClass<T>” for specialized generic classes/records) but I argue these are necessary for the feature to be complete. https://gitlab.com/genericptr/free-pascal/-/commits/generic_helpers For example with simple types: ===================== program tgenhelper1; type generic TMyHelper<T> = type helper for T procedure Print; end; TIntHelper = specialize TMyHelper<Integer>; procedure TMyHelper.Print; begin writeln(self); end; var i: integer = 100; begin i.Print; end. ===================== Or dynamic arrays: ===================== program tgenhelper2; type generic TArrayHelper<T> = type helper for array of T function Count: integer; end; TIntegerArrayHelper = specialize TArrayHelper<Integer>; function TArrayHelper.Count: integer; begin result := Length(self); end; var a: array of integer; begin a := [1,2,3]; writeln(a.Count); // array of T is compatible with TIntegerArrayHelper end. ===================== Or classes: ===================== program tgenhelper4; type generic TMyHelper<T: class> = class helper for T procedure Print; end; TObjectHelper = specialize TMyHelper<TObject>; procedure TMyHelper.Print; begin writeln(ClassName); end; var c: TObject; begin c := TObject.Create; c.Print; end. ===================== Regards, Ryan Joseph _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel