Можно ли в С ++ хранить несколько типов перечислений в переменной? - PullRequest
0 голосов
/ 29 мая 2020

Возможно ли сделать что-то подобное в C ++:

enum A {//Starts from 0 and has no enum with out of place value like 0,1,5,40, etc.
    eg1,
    eg2,
    eg3,
    ...
}

enum B {//Same structure as enum A
    e1,
    e2,
    e3,
    ...
}

some_data_type e = eg1;//No errors here
e = e2;//No errors here

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

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

В C ++ 17 и новее для этого можно использовать std::variant:

enum A {//Starts from 0 and has no enum with out of place value like 0,1,5,40, etc.
    eg1,
    eg2,
    eg3,
    ...
}

enum B {//Same structure as enum A
    e1,
    e2,
    e3,
    ...
}

std::variant<A,B> e = eg1;
e = e2;
1 голос
/ 29 мая 2020

Если вы в порядке, теряете различие между исходными типами, тогда подойдет целое число. Если вы хотите быть немного более ограничительным и разрешить только присваивание и сравнение с «совместимыми» перечислениями, то, вероятно, потребуется пользовательский тип с неявным преобразованием из A и B. К сожалению, вы не можете напрямую добавлять преобразования между двумя перечислениями, потому что и функции преобразования, и конструкторы преобразования должны быть функциями-членами, а перечисления не позволяют. сделает это.

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