вывод аргументов шаблона со строго типизированными перечислениями
-
29-10-2019 - |
Вопрос
Если у меня обычное (слабое) перечисление, я могу использовать его перечисляемые значения как параметры шаблона, не относящиеся к типу, например:
общий и назовите его как: magic<Cat>(t)
насколько я понимаю, если у меня строго типизированное перечисление и я не хочу жестко кодировать тип перечисления, я получаю:
общий и теперь я должен написать: magic<Animal, Animal::Cat>(t)
, что кажется избыточным.
Есть ли способ избежать ввода и класса перечисления, и значения, кроме
общийРешение
Вы можете сделать это так, если умеете использовать C ++ 17
общийдемонстрация: http://coliru.stacked-crooked.com/a/9ac5095e8434c9da
Другие советы
Извините, я должен вам это сказать
Это невозможно
Возьмите макрос, поместите его в заголовок со страшным именем и защитите его от сценария очистки вашего коллеги.Надеюсь на лучшее.
Если вас интересует только значение enum
, а не его тип, вы должны иметь возможность использовать функцию constexpr
для преобразования значения в целое число, избегая повторения имени типа.
Однако, как уже указывалось другими, если вы хотите, чтобы это зависело также от типа, это не сработает.
На этот вопрос есть принятый ответ (проголосовало за).
Реорганизуя собственный код, я нашел более полное решение:
Шаг 1. Использование кода, который я писал:
общийШаг 2: клиентский код:
общий