我正在尝试使用基于常量的结构。我有ObjectTypes
(KEYBOARD,MOUSE,HAPTIC ...),它可以有InputTypes
(MOUSE可以是DEFAULT和INVERSE,而KEYBOARD可以是DEFAULT,NUMERIC和HAPTIC只能是DEFAULT)。 / p>
为了实现这一点,我正在尝试在C ++中名为Constants
的类中使用枚举内部的枚举。它可能会将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
};
};
注意:我知道枚举之间没有继承,所以我需要任何可以以类似方式工作的解决方案。 感谢。
答案 0 :(得分:1)
如果您完成面向对象的整个过程,它就可以工作。因此,不要让所有内容的枚举只有类:
class InputObject {};
class Mouse : public InputObject
{
void setDefault();
void setInverse();
};
这样,InputObject的类型可以保存在对象中,并且只传递实际的InputObject。
答案 1 :(得分: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);
而且,作为奖励,您的枚举不会隐式转换为整数值。
答案 2 :(得分: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);
感谢所有帮助过的人。