-背景情報:
C++ 11には、変数を内部に格納できるenumクラスと呼ばれるクラスがあります。ただし、クラスの型はcharであるとしか見ていません。
enum class : char {
v1 = 'x', v2 = 'y'
};
-質問:
この文字列型の列挙型クラスを表現する方法はありますか?
例えば、
enum class : string{
v1 = "x", v2 = "y"
};
-私が思うこと:
私はそれを使用しようとしましたが、エラーが発生しました。正しく実行しているかどうかはわかりません。文字列を使用したい理由は、文字列が同時に複数の文字を保持できるため、コードでより便利になったためです。
C++ 11またはC++ 14でそれを行う方法はありません。ただし、 enum class を使用することを検討してから、明示的な関数または演算子をコーディングして、_std::string
_- sとの間で変換する必要があります。
C++ 11には、変数を内部に格納できるenumクラスと呼ばれるクラスがあります。
その言い回しは正しくありません:enumクラスは変数を保存しません(ただしenumerators)。
だからあなたはコーディングするかもしれません:
_enum class MyEnum : char {
v1 = 'x', v2 = 'y'
};
_
(これは druckermanlyによる回答 として可能です。なぜならchar
は整数型であるためです;もちろん代わりに文字列を使用することはできません)
次に、いくつかのMyEnum string_to_MyEnum(const std::string&);
関数(引数が予期しない文字列の場合、おそらく何らかの例外をスローします)と別のstd::string MyEnum_to_string(MyEnum);
関数を定義します。 キャスト演算子 を呼び出すことも考えられるかもしれません(しかし、あなたの場合、それが読みにくいと思います)。 MyEnum
型の単一のデータメンバーを含む_class MyEnumValue
_を定義し、そのクラスに キャスト演算子 を持たせることもできます。
_ 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
( 5の規則 を参照)に適切なものがあれば、ほとんど常にMyEnumValue
の代わりにMyEnum
(おそらく_class MyEnumValue
_の内部
いいえ、これは不可能です。
http://en.cppreference.com/w/cpp/language/enum 状態:
定数の値は、列挙の基になる型として知られる整数型の値です。
キーポイントは「整数型」です。文字列は整数型ではありません。
コンパイラは内部的にcharを同等のint表現(ASCII)に変換します。そのため、代わりに文字列を使用することはできません。