Florian Klaempfl wrote:
Mattias Gaertner schrieb:
For example, this is currently not allowed:

  generic TTree<T> = class(TObject)
  type public     TTreeNode = specialize TNode<T>;
  end;

And this neither:

  generic TTree<T> = class(TObject)
  type public
    TTreeNode = class
      Data: T;
    end;
  end;


OTOH records and pointers are allowed.
Will this stay, or is this just not yet implemented?

Is there a need to support this?

Imho the example given by Mattias demonstrates that a similar construct would 
be desirable; or is there another way to accommodate for the aggregation of 
generic classes?

I think TTree/TNode is a typical example where you'd like to use the generic 
type used for TTree to create the corresponding TNode.

type
 generic TNode<T> = class
   type TChildList = TList<TNode>; // and how about this?
   Data:T;
   Children:TChildList;
 end;

 generic TTree<T> = class
   type TTreeNode = specialize TNode<T>;
   Root:TTreeNode;
   GetNode(Index:integer):TTreeNode;
   GetNodeData(Index:integer):T;
 end;

...

function TTree.GetNodeData(Index:integer):T;
begin
 Result:=GetNode(Index).Data;
end;


Regards,

Bram
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to