On 30.10.2015 20:10, leledumbo wrote:
Consider the following:
type
generic TGenClass<T> = class
...
end;
TSpecType = specialize TGenClass<Integer>;
TMyClass = class
FST: TSpecType;
procedure p;
published
ST: TSpecType read FST write FST;
end;
procedure TMyClass.p;
...
begin
PropCount := GetPropList(Self,Props);
for i := 0 to PropCount - 1 do begin
Prop := Props^[i];
PropName := Prop^.Name;
case Prop^.PropType^.Kind of
tkObject: begin
Obj := GetObjectProp(Self,Prop); //1
...
end;
end;
end;
end;
In //1, GetObjectProp will return TObject for ST property. Since generic
types without specialization cannot be used in type declaration, how can I
get the actual type of ST and cast Obj to it so I can access its properties?
Note that ST here is just an example, there could be multiple TGenClass
specialization that TMyClass uses.
TGenClass<> is not a full type, only TGenClass<Integer> is, so you need
to use - in your example - TSpecType(Obj). In Delphi mode you could also
use TGenClass<Integer>(Obj). For mode ObjFPC you'll need to wait till
I've finished generic functions, cause then "specialize
TGenClass<Integer>(Obj)" will work as well.
Note: specializations can also be declared locally in a
procedure/function/method in a type section.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal