У меня есть класс, в котором у меня есть перечисление, определенное так:
class X
{
public:
enum Direction {DIR_LEFT, DIR_RIGHT};
};
Теперь я хочу, чтобы это перечисление повторно использовалось в другом классе, например:
class Y
{
public:
typedef X::Direction Direction;
};
Как и ожидалось, использование Y :: Direction работает правильно, например ::
void myFunction (Y::Direction dir)
{
}
Но значения в перечислении, похоже, не копируются вместе с typedef. Если я напишу следующее, я получу ошибки компиляции:
myFunction (Y::DIR_LEFT);
Вместо этого я должен снова обратиться к исходному месту перечисления, например:
myFunction (X::DIR_LEFT);
Который побеждает мою цель типизации перечисления.
Единственное решение, которое я вижу, это переместить перечисление из класса X и поместить его в другой класс (например, MyEnums), чтобы его можно было повторно использовать X и Y (хотя они все равно должны использовать MyEnums :: DIR_LEFT и MyEnums :: DIR_RIGHT), но, по крайней мере, код больше не зависит от класса X.
Почему сами значения перечисления не отображаются через typedef?
Существуют ли другие шаблоны для управления перечислениями в разных классах?