Hi all,
FPC uses 2 keywords for generics: "generic" for generic definition block, and "specialize" for generic type implementation. I think the "generic" keyword is quite redundant, useless, and too verbose since generics already use pair of to define a generics type. Generics definition should be enough described using the pair of only without "generic" keyword.
The example below should be very obvious to the compiler:
(*** begin of example ***)
type
TRegularIntegerArray: array[0..100] of integer;
TGenericArray<T>: array[0..100] of T;
var
IntegerArrayFromGeneric = specialize TGenericArray<integer>;
(*** end of example ***)Or, if we MUST use "generic" keyword to help compiler parse the code, also make the syntax less cryptic, I suggest using the example below:
(*** begin of example ***)
type
TList = generic class(TObject)
type public
TCompareFunc = function(const Item1, Item2: T): Integer;
var public
data : T;
procedure Add(item: T);
procedure Sort(compare: TCompareFunc);
end of T;
TGenericArray: generic array[0..100] of T;
var
PointerListFromGeneric = specialize TList for Pointer;
IntegerArrayFromGeneric = specialize TGenericArray for Integer;
(*** end of example ***)Though I agree that a generic MUST have a clear structure definition (in type section) before it's being used (in var section), since generic is all about type definition, also for ease of readability.
Any comments?
-Bee-
has Bee.ography at:
http://beeography.wordpress.com
