Forward referencing templates..

James Dean Palmer james at tiger3k.com
Wed Oct 25 08:45:28 PDT 2006


I am interested in expressing some data structure relationships like the 
half-edge data structure using templates.  For example, consider these 
classes with these type dependencies:

class edge(TFace, TVector) {
  ...
}

class face(TSurface, TEdge) {
  ...
}

class surface(TFace) {
  ...
}

class vector(TNumeric) {
  ...
}

The idea being any one of these classes could be subclassed - for 
example to represent weighted edges, weighted faces, etc.. Or a 
different kind of basic numeric could be used. Now I would like to say 
this..

alias vector!(double) vector3D;
alias edge!(face3D, vector3D) edge3D;
alias face!(surface3D, edge3D) face3D;
alias surface!(face3D) surface3D;

But I get an error about a forward reference when trying to do it like 
this.  C++ has difficulty expressing the same kind of relationship 
because it doesn't forward reference templates.  I believe that Java can 
represent this kind of relationship though.

Does anyone know if this can't be done in D? Or is there a better "D" 
way to do it?  Thanks!



More information about the Digitalmars-d mailing list