bearophile wrote:
Andrei Alexandrescu:

* Encode operators by compile-time strings. For example, instead of the plethora of opAdd, opMul, ..., we'd have this:

T opBinary(string op)(T rhs) { ... }

The string is "+", "*", etc.

Can you show an example of defining an operator, like a minus, with that?


T opBinary(string op)(T rhs) {
        static if (op == "-") return data - rhs.data;
        static if (op == "+") return data + rhs.data;

        // ... maybe this would work too ...
        mixin("return data " ~ op ~ "rhs.data;");
}

I love this syntax over the tons of different operation functions. Makes it so much nicer, especially when supporting a bunch of different paramater types (vectors are a good example of this).

T opBinary(string op)(T rhs)
T opBinary(string op)(float[3] rhs)
T opBinary(string op)(float rx, ry, rz)
....

In my set data structure I'd like to define "<=" among two sets as "is subset". Can 
that design allow me to overload just <= and >= ? (opCmp is not enough here).

Bye,
bearophile

Reply via email to