<p>Am 17.05.2015 20:46 schrieb "luciano de souza" <<a href="mailto:luchyanus@gmail.com">luchyanus@gmail.com</a>>:<br>
><br>
> Hello listers,<br>
><br>
> Using Freepascal 2.6.4, I have a problem about generics. In short, I<br>
> can't specialize a class with a subtype of a type declared with<br>
> "public type". Let me try to explain.<br>
><br>
> In dopf.pas, I have:<br>
><br>
> type<br>
> generic TdGOpf<T1, T2, T3> = class(TdComponent)<br>
> public type<br>
> TEntities = specialize TFPGObjectList<T3><br>
> end;;<br>
><br>
> If personmapper is a class specialized from TdGOpf, an instance can be<br>
> created as follows:<br>
><br>
> Personmapper := TPersonMapper.TEntities.create;<br>
><br>
> Yes, this code is successul. But this code is not:<br>
><br>
> type<br>
> generic TGAction <t1, t2> = class(specialize TBrookGAction <t1>);<br>
> private<br>
> Fentities: t2.TEntities; //Error in type definition<br>
> end;<br>
><br>
> This code failed, so I tried:<br>
><br>
> type<br>
> generic TGAction <t1, t2> = class(specialize TBrookGAction <t1>);<br>
> public type TCEntities = t2.Tentities; //Error in type definition<br>
> end;<br>
><br>
> I got also an error if I try:<br>
><br>
> type<br>
> generic TGAction <t1, t2, t2.TEntities> = class(specialize TBrookGAction <t1>);<br>
><br>
> Well, I think the problem is illustrated. The doubt is how can create<br>
> an instance of a public type, in my case, t2.Tentities inside my<br>
> specialized class?</p>
<p>The compiler does not know that T2 can have a subtype called TEntities. While things like method calls are only handled during specialization, types are handled when parsing the generic.<br>
In short: that's not possible as is.</p>
<p>Regards,<br>
Sven</p>