[fpc-pascal] How to use generics and meta class?

Sven Barth pascaldragon at googlemail.com
Tue Feb 25 09:14:54 CET 2014


Am 25.02.2014 00:27, schrieb silvioprog:
> Hello,
>
> I have this structure:
>
>   generic TMyGeneric<T> = class
>   end;
>
>   TMyGenericClass = class of TMyGeneric;
That must not compile. This is a bug.
>
>   TMyType = class
>   end;
>
>   TMyClass1 = specialize TMyGeneric<TMyType>;
>
>   TMyClass2 = class(specialize TMyGeneric<TMyType>)
>   end;
>
> ...
>
> procedure RegisterItem(AItemClass: TMyGenericClass);
> begin
> end;
>
> OK, but when I try:
>
> RegisterItem(TMyClass1);
>
> Return:
>
> Incompatible type for arg no. 1: Got "Class Of TMyGeneric$TMyType", 
> expected "TMyGenericClass".
>
> Or:
>
> RegisterItem(TMyClass2);
>
> Return:
>
> Incompatible type for arg no. 1: Got "Class Of TMyClass2", expected 
> "TMyGenericClass"
>
> So, which syntax to use generic and meta class?
You can't. A generic is by definition not a fully existant type. You can 
only work with specializations.
E.g. TFPGList<> circumvents this by having the main implementation of 
the list inside a non generic TFPSList type which TFPGList<> derives from.

Regards,
Sven



More information about the fpc-pascal mailing list