簡體   English   中英

枚舉在C ++上的enum里面

[英]Enum inside enum on C++

我試圖基於常量來構建一個結構。 我有ObjectTypes (KEYBOARD,MOUSE,HAPTIC ...),它可以有InputTypes (MOUSE可以是DEFAULT和INVERSE,而KEYBOARD可以是DEFAULT,NUMERIC和HAPTIC只能是DEFAULT)。

為了實現這一點,我正在嘗試在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
    };
};

注意:我知道枚舉之間沒有繼承,所以我需要任何可以以類似方式工作的解決方案。 謝謝。

如果您完成面向對象的整個過程,它就可以工作。 因此,不要讓所有內容的枚舉只有類:

class InputObject {};

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

這樣,InputObject的類型可以保存在對象中,並且只傳遞實際的InputObject。

就像在評論中寫的那樣,如果你有權訪問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);

並且,作為獎勵,您的枚舉不會隱式轉換為整數值。

好吧,做一些證明我終於使用重載解決了它。 我通過重載方法並創建三個不同的結構來刪除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);

感謝所有幫助過的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM