вывод аргументов шаблона со строго типизированными перечислениями

StackOverflow https://stackoverflow.com/questions/9400581

Вопрос

Если у меня обычное (слабое) перечисление, я могу использовать его перечисляемые значения как параметры шаблона, не относящиеся к типу, например:

общий

и назовите его как: magic<Cat>(t)

насколько я понимаю, если у меня строго типизированное перечисление и я не хочу жестко кодировать тип перечисления, я получаю:

общий

и теперь я должен написать: magic<Animal, Animal::Cat>(t), что кажется избыточным.

Есть ли способ избежать ввода и класса перечисления, и значения, кроме

общий
Это было полезно?

Решение

Вы можете сделать это так, если умеете использовать C ++ 17

общий

демонстрация: http://coliru.stacked-crooked.com/a/9ac5095e8434c9da

Другие советы

Извините, я должен вам это сказать

Это невозможно

Возьмите макрос, поместите его в заголовок со страшным именем и защитите его от сценария очистки вашего коллеги.Надеюсь на лучшее.

Если вас интересует только значение enum, а не его тип, вы должны иметь возможность использовать функцию constexpr для преобразования значения в целое число, избегая повторения имени типа.

общий

Однако, как уже указывалось другими, если вы хотите, чтобы это зависело также от типа, это не сработает.

На этот вопрос есть принятый ответ (проголосовало за).

Реорганизуя собственный код, я нашел более полное решение:

Шаг 1. Использование кода, который я писал:

общий

Шаг 2: клиентский код:

общий
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top