[Lazarus] Generics type as parameter

Leonardo M. Ramé l.rame at griensu.com
Sun May 13 12:46:16 CEST 2012


On 2012-05-13 10:53:42 +0200, Sven Barth wrote:
> On 13.05.2012 02:49, Leonardo M. Ramé wrote:
> >On 2012-05-12 13:07:18 -0300, Leonardo M. Ramé wrote:
> >>Thanks Sven and Michalis. Using the suggestion by Michalis, I got a
> >>solution mixing Generics and regular objects.
> >>
> >>What I'm pursuing is to replace my TCollection based ORM, with a
> >>Generics based one, this allow users to write less code, in a clearer
> >>way.
> >>
> >>The way the ORM works, is to create a TCollection instance, then execute
> >>an ORM's method to load/save data into/from it, example:
> >>
> >>var
> >>   lCustomers: TCustomers; // this is a TCollection descendant
> >>begin
> >>   lCustomers := TCustomers.Create;
> >>   FConnector.LoadData(lCustomers, []);
> >>   ... do something with lCustomers ...
> >>   lCustomers.Free;
> >>end;
> >>
> >>As you can see, FConnector.LoadData receives a TCollection as parameter,
> >>and using RTTI, it fills each TCustomer published property.
> >>
> >>With Michalis's solution, I can turn my ORM from TCollections to
> >>Generics with very little changes, see how small is the unit customer
> >>now, instead of a complete TCollection/TCollectionItem definition:
> >>
> >
> >Following the same subject, inside a method receiving an TFPSList, how
> >can I know the type of items it will contain, even if the list is
> >empty?.
> >
> >In a TCollection, I can use myCollection.ItemClass to know it, but in a
> >specialized Generic type, how can I know, in an abstract way the type of
> >a TFPGList<T>?. I mean, what type is T?.
> 
> You can't. That's why the method with the "parent class" might be considered
> less powerful than the one with generic methods/procedures.
> 
> Regards,
> Sven
> 

Hm. Another thing I'm stuck on, is specialized classes doesn't seem to
have a ClassName, am I righ?.

-- 
Leonardo M. Ramé
http://leonardorame.blogspot.com




More information about the Lazarus mailing list