On Monday, 11 November 2013 at 12:14:10 UTC, Jonathan M Davis
wrote:
Every time you use an enum, it's replaced with its value. So,
if an enum is an
AA, then that literal is copy-pasted everywhere that the enum
is used. So, it
would almost certainly be foolish to use it anywhere other than
to assign to a
variable (and then all of the operations are done on the
variable). Really,
having an enum that's an AA is almost certainly a foolish thing
to do. It's
one case where the behavior of enums doesn't help and
definitely hurts.
- Jonathan M Davis
I have found it to be kind of usefull atleast when i'm only using
the AA at compiletime. Like a simple vector swizzle like the code
below. I store rgba/xyzw characters in the table with diffrent
offsets into a static array.
Vector!(s.length, T) opDispatch(string s)()
if(s.length > 1)
{
Vector!(s.length, T) res;
foreach(i; staticIota!(0, s.length)) {
enum offset = swizzleTable[s[i]];
res.data[i] = data[offset];
}
return res;
}
However with your statement above i'm now a little worried does
this mean that the line enum offset = swizzleTable[s[i]]; will
not be able to pick the correct constant at compiletime? And will
instead do some runtime AA hash lookup?