[解決済み] enum クラスは基礎となる型に変換できますか?
2022-05-13 17:33:38
質問
を変換する方法はありますか?
enum class
フィールドを基本型に変換する方法はありますか?私はこれが自動的に行われると思ったのですが、どうやらそうではないようです。
enum class my_fields : unsigned { field = 1 };
unsigned a = my_fields::field;
その代入はGCCによって拒否されています。
error: cannot convert 'my_fields' to 'unsigned int' in assignment
.
どのように解決するのですか?
私はあなたが使用することができると思います std::underlying_type を使って基礎となる型を知り、それからキャストを使えばいいと思います。
#include <type_traits> //for std::underlying_type
typedef std::underlying_type<my_fields>::type utype;
utype a = static_cast<utype>(my_fields::field);
これを使えば
とする
の定義でそれを言及する必要はありません。
enum class
のように
enum class my_fields : int { .... }
といった具合に
を書くこともできます。
ジェネリック
変換関数を書くこともできます。
任意の
enum class
に、その下にある
インテグラル
型に変換します。
template<typename E>
constexpr auto to_integral(E e) -> typename std::underlying_type<E>::type
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
というようにすれば、それを使うことができます。
auto value = to_integral(my_fields::field);
auto redValue = to_integral(Color::Red);//where Color is an enum class!
と宣言されているので、この関数は
constexpr
と宣言されているので、定数表現が必要なところで使用することができます。
int a[to_integral(my_fields::field)]; //declaring an array
std::array<int, to_integral(my_fields::field)> b; //better!
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] 8192個の要素にループをかけると、プログラムが遅くなるのはなぜですか?
-
[解決済み] std::stringをintに変換するにはどうしたらいいですか?
-
[解決済み] C++11でRule-of-ThreeがRule-of-Fiveに?[クローズド]
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】変数やフィールドがvoid宣言されている