[英]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.