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