On 27.09.2013 08:03, Xiangrong Fang wrote:
Hi Sven,

2013/9/26 Sven Barth <pascaldra...@googlemail.com
<mailto:pascaldra...@googlemail.com>>


    As you can see you are constructing a TTreeInteger class inside
    TTreeInteger.Clone and nothing in the world afterwards can turn it
    into a TTreeInt.


​Do you mean that casting TTreeInteger into TTreeInt is not possible
because this is to cast a parent class into a child class?  If so, how
this is possible (mentioned in my earlier question about avoid typecasting):

type
   TIntTree = class(specialize TTree<Integer>)
   end;

var
   it1, it2: TIntTree;
begin
   ... ...
   it2 := TIntTree(it1.FirstChild);
end.

This is also casting TTree$Integer (parent class) to TIntTree (child class)?

Depends on how you add the nodes. If you use TIntTree.Create(..., SomeOtherIntTree) then the class instance which is added to the FItems of the parent is a TIntTree. If you use TTree$Integer.Create then itwill be a TTree$Integer. Also see my other mail I just sent regarding your Clone call.

I'd suggest you to compile your code (for testing) with -CR which will turn all object type casts to "as" typecasts thus they will raise exceptions if the typecast is not possible (e.g. if you are casting a TTree$Integer instance to a TIntTree). This way you can find out where you still have problems.

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to