Hello, I am trying to figure out how templates work and tried to define the following template to define vertices of any dimension and operations on them.
import std.stdio; import std.random; import std.range; import std.conv; import std.math; /* * T must be one of the floating point types * float, double, real _ I should be enforcing this. */ template vt(T) { struct vertex { this(T[] crds...) { if( crds.length < 2 ) { throw new.Exception("To small!"); } else { coords.length = crds.length; foreach(ref v_coord, in_coord; lockstep(coords, crds)) { v_coord = in_coord; } } } @property T x() { return coords[0];} @property T y() { return coords[1];} @property T z() { return ( coords.length < 3 ? T.nan : coords[2] ); } } T euclid_dist(T a, T b) { T sum = 0; foreach( ref a_crd, ref b_crd; lockstep( a.coords, b.coords ) ) { sum += (a_crd - b_crd)*(a_crd - b_crd ); } return sqrt(sum); } } //End of template int main(string argv[] ) { vt!(float).vertex v1(0.0,0.0); vt!(float).vertex v2(3.0,4.0); writefln("The distance between vertex 1 and vertex 2 is ", vt!(float).euclid_dist(v1, v2) ); } When I try to compile this I get the message: vertex.d(57): Error: found 'v1' when expecting ';' following statement vertex.d(58): Error: found 'v2' when expecting ';' following statement Lines 57 and 58 are the first two lines in my main() function. I can't figure out why, from the examples I've looked at I am using the syntax properly, but am clearly missing something. Also, since I don't really know what I am doing any criticisms on how I am defining the vertex template are welcome. Cheers, Craig