У меня есть класс, в котором у меня есть перечисление, определенное следующим образом:
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);
Что поражает мою цель typdefing перечисления.
Единственное решение, которое я вижу, это переместить перечисление из класса X и поместить его в другой класс (например, MyEnums), поэтому его можно повторно использовать с помощью X и Y (хотя они все равно должны использовать MyEnums:: DIR_LEFT и MyEnums:: DIR_RIGHT), но по крайней мере код больше не зависит от класса X.
Почему сами значения перечисления не отображаются через typedef?
Существуют ли другие шаблоны для управления перечислениями в разных классах?