I wrote a simple template mixin to hold common operator overloads:

mixin template VectorSpaceOpsMixin(Vector, Scalar, alias a, alias b)
{
    Vector opUnary(string op)() if (op == "-") {
        return Vector(-a, -b);
    }
    ...
}

This works like this:

struct complex {
    double a, b;
    mixin VectorSpaceOpsMixin!(complex, double, a, b);
    ...
}

Now this is nice, but it only works when the vector has 2 parts. Can the mixin template be made more general? What will then be its definition? This don't work: mixin template `VectorSpaceOpsMixin(Vector, Scalar, alias... parts) { ... }`

Obviously, this kind of functionality is easy with string mixins. Can it be achieved without them?

Reply via email to