On Friday, 5 April 2013 at 18:00:56 UTC, bearophile wrote:
Sebastian Graf:
I wonder if there is a good way to dry up this:

I suggest to improve that code a lot.

For machineWord there is:

alias machineWord = Select!(machine == Machine.I386, uint, ulong);


This:
(1 << 32)

Gives:
Error: shift by 32 is outside the range 0..31

Generally it's better to use named enums and final switches, where possible.

Keep in mind built-in integral numbers have the max attribute.

Bye,
bearophile

Thanks, this shows that I didn't really try to run that example.
The Select template is helpful indeed.

Is there however some way to generate that switch with cases for each enum member in a template, so that each case calls <some-passed-template-func>(Machine)() instantiated with the appropriate enum member? I know you could do it with string mixins, but that be a hassle to implement...

Eventually, I want my code to look like

    void func(Machine machine)() { ... }
    switchOnEachEnumMember!func(machine);

Reply via email to