問題タブ [enum-class]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2725 参照

c++ - 強く型付けされたC++0x列挙の比較

強く型付けされたC++0x列挙のインスタンスが互いに比較できないのはなぜですか?


更新:gcc4.6では同等です。gcc4.4で動作したかどうかはわかりません。

0 投票する
3 に答える
757 参照

c++ - 列挙型クラスの値をvarargs関数の引数として使用できますか?

C ++ 11は、より強力な型の列挙型である列挙型クラスを追加します。列挙型クラスの値は、他の列挙型クラスまたは整数の値に暗黙的に変換されません。また、明示的なサイズ指定子により、前方宣言が許可されます。

そのような列挙の値をvarargs関数に渡し、標準で定義された動作の範囲内にとどまることが可能ですか?実装定義の動作の範囲内ですか?

0 投票する
3 に答える
4042 参照

c++ - 整数の検証はいくつかの列挙型クラス項目です(C ++ 11)

私はいくつかの列挙型クラスを持っています

整数をに変換できるかどうかを確認したいFoo。これを行うための理想的な方法は何でしょうか?これは実行時チェック用です(整数はコンパイル時にまだ不明です)

明らかに私はこれを難しい方法で行うことができます(bool CheckEnum(Foo);デフォルトを除くすべての場合にtrueを返す大きなお尻のスイッチで関数を書く)が、私はそれほど多くの書き込みを回避するよりエレガントなメカニズムを望んでいました。MPLまたはBoost.Preprocessor完全に許容できるソリューションですが、残念ながらその1つについてはほとんど知りません。

0 投票する
2 に答える
701 参照

c++ - 列挙型と列挙型クラスのリンク互換性

列挙型クラスを使用するC++11APIがあるとします。

ここで、このAPIを使用したいとしますが、C++11コンパイラーを持っていません。だから私:

  • 列挙api.hpp型クラスを変更して、通常の列挙型に変更します。
  • api.hpp変更されたものを含み、APIを通常どおりに使用するコードコードを記述します(例:呼び出しf)。
  • このコードをC++11以外のコンパイラでコンパイルし、C ++ 11コンパイラでコンパイルされたAPI実装にリンクします(変更されていないものを使用api.hpp)。

これはGCCで機能するようですが、一般的には安全ですか、それとも私は火遊びをしていますか(ODR違反など)?

2つのコンパイラがリンク互換であると仮定すると、問題となるのはenumクラスとenumクラスだけです。

0 投票する
6 に答える
12051 参照

c++ - enum クラスをテンプレート引数として使用する std::get

私はstd::tupleクラス列挙型を使用して定義し、実際のインデックスを忘れて、タプルの各フィールドにどういうわけか「名前を付ける」ようにしています。

したがって、これを行う代わりに:

これは私がしました:

問題は、これが gcc 4.5.2 を使用してコンパイルされたため、4.6.1 バージョンをインストールしたため、プロジェクトがコンパイルに失敗したことです。このスニペットはエラーを再現します:

エラーは基本的に、次の呼び出しに一致するオーバーロードがないことを示していますstd::get

では、列挙型クラスをテンプレート引数として使用できる方法はありますstd::getか? これはコンパイルする必要がなく、gcc 4.6 で修正されたものでしたか? 単純な列挙型を使用することもできますが、enum クラスのスコープ プロパティが好きなので、可能であれば後者を使用したいと思います。

0 投票する
8 に答える
136685 参照

c++ - C++ 11 で列挙型クラスの値を出力するにはどうすればよいですか

enum classC++11で an の値を出力するにはどうすればよいですか? C++03 では次のようになります。

c++0x では、このコードはコンパイルされません

Ideone.comで編集

0 投票する
1 に答える
247 参照

c++ - 自己文書化コードは潜在的なパフォーマンスの問題に値しますか?

厳密に型指定された列挙型の列挙子をフラグとして (組み合わせて) 使用できる小さなクラスを作成しました。基になる型の検出に type_traits を使用しているため、わずかに型安全であり、ほとんどがコンパイル時に処理されるはずです。とはいえ、本当にお得かどうかは疑問でした。

私は今のようなものを書くことができます

プログラマーは、Mode の列挙子 (Mode::Read など) のみを使用でき、他の列挙型を Mode と組み合わせることができないことがわかります。よりも良い方法だと思いますか

、人々がそれを評価できるかどうかはわかりませんか?

0 投票する
5 に答える
26652 参照

c++ - enum クラスを使用した C++11 標準準拠のビットマスク

列挙型クラスを使用して、(n3242 ドラフトの 17.5.2.1.3 で説明されているように) 標準準拠のタイプ セーフなビットマスクを実装できますか? 私が読んだ方法では、タイプ T は、|、&、^、~、|=、&=、および ^= 演算子をサポートしている場合はビットマスクであり、さらに if(l&r) を実行できます。ここで、l と r は T 型です。 . リストにないのは演算子 != と == であり、並べ替えを可能にするために、おそらく < もオーバーロードする必要があります。

演算子を機能させるのは煩わしいボイラープレート コードですが、if(l&r) の実行方法がわかりません。少なくとも以下は GCC でコンパイルされません (int への誤った暗黙的な変換を許してしまうため、非常に危険です):

編集:列挙型クラスがメンバーを持つことができないことは確かです。if(l&r) をどのように行うかという実際の問題は残っています。

0 投票する
1 に答える
155 参照

c++ - 列挙識別子の基になるタイプを宣言する

私は次のように列挙型を宣言しました:

これにより、directoryTypeタイプを文字列に追加しようとするとエラーが発生します。列挙型識別子の基になる型を列挙型宣言に含める必要があると思います。またはのようなもの

http://msdn.microsoft.com/en-us/library/2dzy4k6e(v=vs.80).aspxで説明されているように

しかし、これは私にとってはコンパイルされていません。列挙型識別子の基になる型を宣言するための適切な構文は何ですか?

0 投票する
3 に答える
18247 参照

c++ - 列挙型クラスの変換を手動で定義することは可能ですか?

通常、次の構文を使用してクラスのキャストを定義できます。

これを行う方法や、に似た方法はありenum classますか?