Если параметры имеют тип некоторого перечисления, то действительно ваш пример позволяет сделать код лаконичнее.
Но в моем примере тип параметров int и как как оба параметры могут содержать значения из одного диапазона, то к сожалению нельзя использовать поразрядные операции (ни "И", ни "ИЛИ"), например "case 4 | 6:" и "case 6 | 4:" будут генерировать одно и тоже значение. Чтобы избежать этого и различать эти два случая я применил простенькую хеш функцию, которая сдвигает первый параметр N влево на число разрядов достаточное чтобы вместить максимально возможное значение второго параметра M (Максимальное значение задается константой MAX_M). Функция расчета хеша объявлена с ключевым словом constexpr. Таким образом данная функция возвращает константу времени компиляции.
Ну а макросы я добавил сначала для удобства сокрытия дополнительного кода и проверок, а уже остальные добавил для общей стилистики.
Видимо зря). Спасибо за Ваши комментарии.
В данном примере логическое "И" просто обнулит результат (2 & 4 = 0010b & 0100b = 0). И поэтому здесь надо использовать именно "Или", или обычное сложение.
Но в моем примере тип параметров int и как как оба параметры могут содержать значения из одного диапазона, то к сожалению нельзя использовать поразрядные операции (ни "И", ни "ИЛИ"), например "case 4 | 6:" и "case 6 | 4:" будут генерировать одно и тоже значение. Чтобы избежать этого и различать эти два случая я применил простенькую хеш функцию, которая сдвигает первый параметр N влево на число разрядов достаточное чтобы вместить максимально возможное значение второго параметра M (Максимальное значение задается константой MAX_M). Функция расчета хеша объявлена с ключевым словом constexpr. Таким образом данная функция возвращает константу времени компиляции.
Ну а макросы я добавил сначала для удобства сокрытия дополнительного кода и проверок, а уже остальные добавил для общей стилистики.
Видимо зря). Спасибо за Ваши комментарии.