Я не знаю, как определяются эти перечисления, но, скорее всего, они либо (старые) в стиле C enum
s, либо (начиная с C ++ 11) строго типизированы enum class
es.
Следующий код компилируется, поэтому static_cast
ваш друг здесь:
namespace
{
enum OLD_ENUM1 { A=1,B=2};
enum OLD_ENUM2 { C=1,D=2};
enum class NEW_ENUM1 { A=1,B=2};
enum class NEW_ENUM2 { A=1,B=2};
}
int main()
{
OLD_ENUM1 o1(A);
OLD_ENUM2 o2(static_cast<OLD_ENUM2>(o1));
NEW_ENUM1 n1(NEW_ENUM1::A);
NEW_ENUM2 n2(static_cast<NEW_ENUM2>(n1));
return EXIT_SUCCESS;
}
Обратите внимание, что для OLD_ENUM1 и OLD_ENUM2 я не могу использовать одинаковые имена для значений перечисления, поскольку они адресованы без пространства имен.Для строго типизированных перечислений я могу сделать это, потому что, поскольку они являются классами, у них есть свои собственные пространства имен.