0

我正在尝试建立一个基于常量的结构。我有ObjectTypes(KEYBOARD, MOUSE, HAPTIC ...) 可以有InputTypes(鼠标可以是默认值和反向,而键盘可以是默认值和数字和触觉只能是默认值)。

为了让它工作,我试图Constants在 C++ 中调用的类中使用枚举中的枚举。ObjectTypes将参数和参数传递给函数可能会起作用InputTypes,所以我在原型中需要这样的东西:

changeInputSystem(SimulatorConstants::InputObject input, SimulatorConstants::InputTypes type)

但是在 C++ 中,当我声明一个枚举时(内部)从中取出的每个值,其中一些值替换了其他值。

我现在的代码(不工作)是:

    enum InputObject {
        KEYBOARD,
    MOUSE,
    HAPTIC
};

enum InputTypes {
    enum KeyboardTypes {
        DEFAULT
    };
    enum MouseTypes {
        DEFAULT,
        INVERSE
    };
    enum HapticTypes {
        DEFAULT
    };
};

注意:我知道枚举之间没有继承,所以我需要任何可以以类似方式工作的解决方案。谢谢。

4

3 回答 3

1

如果你做整个面向对象的事情,它就会起作用。因此,与其对所有事物进行枚举,不如使用类:

class InputObject {};

class Mouse : public InputObject
{
  void setDefault();
  void setInverse();
};

这样,InputObject 的类型可以保存在对象中,而您只传递实际的 InputObject。

于 2013-04-11T14:04:20.303 回答
1

就像评论中写的那样,如果您可以访问 C++11 编译器,最好使用枚举类,这会将您自己接受的答案(在撰写本文时)代码更改为:

enum class KeyboardTypes {
   DEFAULT
};
enum class MouseTypes {
  DEFAULT,
   INVERSE
};
enum class HapticTypes {
   DEFAULT
};

当然,您的重载函数可以更改为更自然的版本:

void changeInputSystem(SimulatorConstants::MouseTypes type);
void changeInputSystem(SimulatorConstants::KeyboardTypes type);
void changeInputSystem(SimulatorConstants::HapticTypes type);

而且,作为奖励,您的枚举不会隐式转换为整数值。

于 2014-04-24T13:18:55.687 回答
0

好的,做一些证明我终于用重载解决了它。我通过重载方法并创建三个不同的结构删除了 ObjectTypes:

struct KeyboardTypes {
   enum types{
      DEFAULT
   };
};
struct MouseTypes {
   enum types{
      DEFAULT,
      INVERSE
   };
};
struct HapticTypes {
   enum types{
      DEFAULT
   };
};

和重载的成员函数:

void changeInputSystem(SimulatorConstants::MouseTypes::types type);
void changeInputSystem(SimulatorConstants::KeyboardTypes::types type);
void changeInputSystem(SimulatorConstants::HapticTypes::types type);

感谢所有帮助过的人。

于 2013-04-11T14:20:09.487 回答