[fpc-devel] Is this supposed to work (generic)?
Kostas Michalopoulos
badsectoracula at gmail.com
Tue Mar 28 20:29:29 CEST 2023
On 3/26/23 14:30, Martin Frb via fpc-devel wrote:
> generic GenLinkedList<D, T> = class
> Data: D;
> Next: T;
> end;
> TSome = class;
> TSome = class(specialize GenLinkedList<integer, TSome>);
AFAIK "specialize" essentially "pastes" the parameters (after some
checking) so it'd be as if you had declared...
TSome = class;
GenLinkedList = class
Data: Integer;
Next: TSome;
end;
TSome = class(GenLinkedList);
...which is perfectly valid Free Pascal code.
Also AFAIK the reason the others do not work is because when specialize
is called, TFoo and TBar are not known to the compiler yet, but the
forward declaration with TSome tells to the compiler that it is a class.
I guess it *is* a bit inconsistent that you can use the name of the type
you are declaring during the declaration itself for classes - like "TFoo
= class Foo: TFoo; end" - or target a type with a pointer before the
targeted type is even known and yet specialization needs to know ahead
of time everything, but that's how things are :-P
Kostas
More information about the fpc-devel
mailing list