2013/9/28 Sven Barth <pascaldra...@googlemail.com> > On second sight your solution is not correct, because you are using Clone > inside your parent class which would not use the (non-virtual) Clone you > created. > > I've now played around with 2.6.2 myself and this should solve this > problem: > > === code begin === > > type > generic TTree<T> = class > private type > TSelfType = TTree; > TSelfClass = class of TSelfType; // earlier I suggested TTree which > 2.6.2 does not support=== code end === > > I think this solution only fixed the problem with 2.6.2 that you have to use TSelfType, but the logic is still not correct.
Using your modified version, I try to achieve some complex Clone strategy, for example, either one of the following: 1) the descendant has added a field other than Data that needs to be cloned; 2) the clone is "non-verbatim", it will multiple Data by 2 when cloning. Let's use the 2nd one as an example, the following does not work: type TIntTree = class(specialize TTree<Integer>) public function Clone: TIntTree; end; function TIntTree.Clone: TIntTree; begin Result := TIntTree(inherited Clone); Result.Data *= 2; end; It only multiple the ROOT node of the cloned tree, not every node. Regards, Xiangrong
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal