On 10/7/2011 7:33 PM, Andrej Mitrovic wrote:
You don't have to rewrite Vector for multiple dimensions, methinks:

class Vector(T...) {
     this(T t) {}
}

void main()
{
     alias Vector!(float, float) vec2f;
     auto v = new vec2f(1.0,1.0);
}

You'll probably have to play with `static if`, template constraints,
and stuff like that.

I got this working, found an odd bug though. This code,

alias Vector!(float, float) vec2f;
alias Vector!(double, double) vec2d;
alias Vector!(float, float, float) vec3f;

public struct Vector(T...) {
        int dim = 0;

        this(T...)(T args) {
                dim = args.length;
        }

        unittest {
                auto v = new vec2f(1.2f, 1.5f);
                vec2f d = new vec2f(1.1f, 1.4f);

                assert(v.dim == 2);
                assert(d.dim == 2);
        }
}

will pass the first assert and fail on the second. Checking out the contents of v.length and d.length with writeln gives the correct answer on the first and
2
1
RANDOMHEXCODE
on the second. Very strange.

Reply via email to