Andrei Alexandrescu wrote:
[snip]

All right, let's do this with operator overloading :o). Ideas? I have a couple, but I don't want to introduce bias.

Andrei

The only idea I can come up with is to introduce the following:

struct Vector
{
    macro opExpression(ast)
    {
        ...
    }
}

The compile-time opExpression macro's job is to spit out a function that takes each leaf of the AST as an argument and returns the final value of the expression.

You could simplify it by ensuring that you don't get any subexpressions that don't result in the type "Vector". For example:

Vector a, b, c;
double g, h;

a = b + (g*h) * c;

The AST would have "(g*h)" as a single node of type double.

Of course, this would probably be exceedingly complex, both on the compiler and user side of things. I can't imagine what the contents of that macro would even look like...

The one positive to this method is that it's about as general as you can get; assuming this was implemented, it would hopefully be possible to implement a simpler scheme on top of it.

struct Vector
{
    mixin FusionOverloadFor!("+","-","*","/",".dot",".cross");
}

I really hope there's a better way.

  -- Daniel

Reply via email to