Forward referencing templates..

Sean Kelly sean at f4.ca
Wed Oct 25 14:22:06 PDT 2006


Bradley Smith wrote:
> James Dean Palmer wrote:
>> 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!
> 
> 
> If you substitute surface3D into the alias for face3D, you get
> 
> alias face!(surface!(face3D), edge3D) face3D;
> 
> This shows that the alias for face3D is being defined by face3D. Isn't 
> that an infinitely recursive definition?
> 
> How would you construct a similar relationship in Java?

For what it's worth, Java generics have very little relation to D/C++ 
templates.  Java generics are basically just some compile-time type 
checking plus implicit cast operations from Object when reading generic 
values.  This stands in stark contract to templates which are a 
compile-time code generation tool.  If forward referencing is the only 
issue then D compiler changes should be able to address the problem, but 
if this is really a matter of a circular dependency I think the OP is 
out of luck.


Sean



More information about the Digitalmars-d mailing list