Метка регистра переключателя должна иметь целочисленное константное выражение, поэтому вы не можете вызывать функцию в метке регистра.
Нет ничего плохого в использовании макроса для этого.
Если вы действительно обеспокоены использованием макроса, #define
это непосредственно перед оператором switch и #undef
сразу после оператора switch.
В C ++ 0x вы 'Я смогу создать constexpr
функций, которые можно использовать в константных выражениях, но, насколько мне известно, ни один компилятор фактически полностью не поддерживает эту часть C ++ 0x.