簡體   English   中英

c ++中的類型字符串的枚舉類

[英]enum class of type string in C++

- 背景資料:

C ++ 11中有一個類稱為枚舉類,您可以在其中存儲變量。 但是,我只看到類的類型為char:

enum class : char {
   v1 = 'x', v2 = 'y'
};

- 題:

有什么方法可以表達這個類型字符串的枚舉類嗎?

例如,

enum class : string{
  v1 = "x", v2 = "y"
};

- 我的想法:

我嘗試使用它,但是我遇到了錯誤,我不確定我是否做得對。 我想使用字符串的原因是它們能夠同時保存多個字符,因此它對我的代碼更有用。

在C ++ 11或C ++ 14中無法做到這一點。 但是,你應該考慮使用一些枚舉類 ,然后編寫一些顯式函數或運算符來將它轉換為std::string -s。

C ++ 11中有一個類稱為枚舉類,您可以在其中存儲變量。

這句話不正確:枚舉類不存儲變量(而是枚舉器 )。

所以你可能編碼:

enum class MyEnum : char {
   v1 = 'x', v2 = 'y'
};

(這是可能的,正如druckermanly回答的那樣 ,因為char是一個完整的類型 ;當然你不能使用字符串代替)

然后定義一些MyEnum string_to_MyEnum(const std::string&); function(如果參數是一個意外的字符串,它可能會拋出一些異常)和另一個std::string MyEnum_to_string(MyEnum); 一。 你甚至可以考慮讓一些演員操作員調用它們(但在你的情況下我發現它不可讀)。 您還可以定義一個class MyEnumValue包含一個MyEnum類型的單個數據成員,並且該類具有MyEnum 操作符 ,例如

 class MyEnumValue {
    const MyEnum en;
 public:
    MyEnumValue(MyEnum e) : en(e) {};
    MyEnumValue(const std::string&s)
     : MyEnumValue(string_to_MyEnum(s)) {};
    operator std::string () const { return MyEnum_to_string(en);};
    operator MyEnum () const { return en };
    //// etc....
 };

MyEnumValue有更多的東西(參見五條規則 ),你幾乎總是可以使用MyEnumValue而不是MyEnum (它可能甚至可能是class MyEnumValue

不,這是不可能的。

http://en.cppreference.com/w/cpp/language/enum說明:

常量的值是整數類型的值,稱為枚舉的基礎類型。

關鍵點是“整數類型” - 字符串不是整數類型。

編譯器在內部將您的char轉換為其等效的int表示(ASCII)。 所以不可能使用字符串。

暫無
暫無

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

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