Могу ли я использовать универсальный тип enum в качестве параметра функции? - PullRequest
0 голосов
/ 07 октября 2019

Я хочу передать параметр в функцию, которая является перечислением. Но у меня создано много разных перечислений, поэтому я хочу, чтобы эта функция была полезной для всех них. Является ли это возможным? Я хочу сделать что-то вроде этого:

enum Enum a {one, two};
enum Enum b {red, white};

void useEnum (enum anyEnum){
    //do something
}

1 Ответ

2 голосов
/ 07 октября 2019

Вы можете заставить функцию принимать любой понравившийся вам тип, сделав ее шаблоном:

enum Enum a {one, two};
enum Enum b {red, white};

template <typename EnumType>
void useEnum (EnumType anyEnum){
    //do something
}

Однако я сильно сомневаюсь, что это хорошая идея написать одну функцию, которая работает с числами и цветами. Не зная больше контекста, я бы предпочел пойти на перегрузки или даже более явно:

void useNumber(a number){}
void useColor(b color){}

PS: Если вы останетесь с одной функцией для разных перечислений, то знайте, что вы в основном делаете шаг назад. Основная цель перечислений состоит в том, чтобы иметь перечисления, безопасные для типов (enum class добавляет больше типов безопасности), тогда как внутри ваших useEnum единственное, что объединяет два перечисления, - это то, что они имеют элементы с базовыми значениями 0 и 1 и вот над чем вы будете работать. На этом этапе использование перечислений не имеет больше преимуществ по сравнению с использованием необработанных 0 и 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...