On 2009-12-01 14:01:26 -0500, Andrei Alexandrescu
<[email protected]> said:
KennyTM~ wrote:
Alternative suggestion:
Make "x in y" returns a bool and works for arrays. Then you can write
int opBinary(string s)(int rhs) if (s in ["+", "-", "*", "/", "^", "|",
"&"]) { ... }
It's a bit difficult to see a very thin operator mask a linear
operation, but I'm thinking maybe "x in y" could be defined if y is a
compile-time array. In that case, the compiler knows the operation and
the operand so it may decide to change representation as it finds fit.
I don't like making this compile-time only. There are many cases where
you may want to do the same check at runtime and it'd be a bother to
need a different syntax. Better to create a wrapper struct for such
arrays:
s in set("+", "-", "*", "/", "^", "|", "&")
where set() returns a Set!string struct wrapping a sorted array of
those operators for which 'in' could work fast even at runtime. Make
sure it works with CTFE and you have what you want.
--
Michel Fortin
[email protected]
http://michelf.com/