Travis Boucher wrote:
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).

Indeed, the advantage of this is that you can use string mixins to implement many operations at once, instead of laboriously defining many functions.


Andrei

Reply via email to