問題タブ [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 に答える
8744 参照

c++ - switch ステートメントでの int クラスから enum クラスへの暗黙的な変換

上記のスニペットは、msvc2012 では正常にコンパイルされますが (動作します)、clang-3.4 および g++-4.8 では失敗します。これらはstatic_cast<pid>(propId)、switch 句内で使用する必要があります。

ちなみに、明示的なキャストを伴わない単純な代入pid a = propId;は、各コンパイラでエラーになります。

正解したのはどっち?

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

c++ - 明示的な変換関数による enum-class 型の static constexpr クラス メンバの初期化

g++ 4.8.1 と clang++ 3.4 の動作に矛盾があります。

type への変換関数をA持つリテラル型の classがあります。explicit constexprenum class E

Gcc では、場合によっては変換関数を使用して型の定数式から型のconstexpr変数を初期化できますが、変数が静的クラス メンバーの場合はそうではありません (以下)。EAe2

Clang は、すべてのコンテキスト ( e1e2およびe3) で初期化を拒否します。

[over.match.conv]p1明示的な変換関数の使用によると、ここでは OK です

列挙型の代わりに別のリテラル クラス型に変換するときに、同様のパターンが見られます。g++ は の初期化をs1拒否し、clang は の初期化を拒否s1s2ますs3。に従って、これらも有効であるべきだと思います[over.match.copy]p1

どちらかが正しい場合、どのコンパイラが正しいですか?


編集:注意すべき興味深い点がいくつかあります:

  1. 結果は、clang-3.4 と clang-svn の間で異なります。以下のコメントを参照してください。
  2. 初期化に括弧の代わりに括弧を使用する場合、e2/s2e1// e3/の間にはまだ違いがありs1ます。 http://coliru.stacked-crooked.com/a/daca396a63425c6bs3を参照してください。gcc と clang-svn は同意しますが、e2 と s2 を拒否することが正しいとは思えません。
0 投票する
2 に答える
4104 参照

c++11 - QSettings の QVariant の列挙型クラス

enum クラス、QVariants、および QSettings クラスに問題があります。QSettings インスタンスに入る QVariant 内に格納したい enum クラス値があります。したがって、私のコードは実際には次のようになります。

コード実行のこの時点で、アサーションが飛び込んで文句を言います。

インターネットを検索したところ、適切な << および >> 演算子がクラスにないことがわかりました。しかし、それは enum クラスのオプションではありません。私も使ってみました

しかし、それは役に立ちませんでした。他の提案/解決策があるかもしれません。ありがとう!

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

c++ - C++ 11の厳密に型指定された列挙型をポインターを介して基になる型にキャストできないのはなぜですか?

C++11 では、厳密に型指定された列挙型 ( enum class) をその基になる型にキャストできます。しかし、ポインタを同じものにキャストできないようです:

なぜこれが必要なのかを理解しようとしています.enumメカニズムについて、これをサポートするのが困難または無意味になるものはありますか? 規格上の単純な見落としですか?他の何か?

列挙型が上記のように整数型の上に真に構築されている場合、値だけでなくポインターもキャストできるはずです。または C スタイルのキャストを引き続き使用できますreinterpret_cast<int*>が、それは必要だと思っていたよりも大きなハンマーです。

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

c++ - Qt - 列挙型クラス型を持つ Q_DECLARE_METATYPE()

enum クラス型で Q_DECLARE_METATYPE() を使用する方法はありますか? 古い列挙型が機能することは知っていますが、これらの新しく強く型付けされた列挙型はどうでしょうか? この問題に関する他の場所は見つかりません。利用可能な最新の Qt バージョンを使用しています。

例:

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

c++ - c++:「列挙型クラス」を使用したクラス内の列挙型

クラス内で列挙型を記述する正しい方法は何でしょうか? 私はコンウェイの人生ゲームのコードを C++ で書いています。だから私は、さまざまな種類のパターンに関する情報を含むパターンクラスを持っています:

私の目標は、ここで地球規模の空間を汚染することではありません。おっとの概念を念頭に置いて、クラス内で列挙型を記述する書き込み方法です。そうでない場合は、いくつかのより良い代替案と、この方法に対する利点を提案してください。クラス内に列挙型を記述する際に留意することについての入力は大歓迎です。

編集:@Jay Miller 彼の入力に基づいて、私は彼の3つの方法をすべて試しました

私の発見(コードを試して少しグーグルで調べた後):

  1. PatternSimple は、私の場合、クラス内で列挙型を記述する最も簡単な方法です。ただし、型の安全性が損なわれます。つまり、列挙値を他のデータ型と比較でき、エラーは発生しません。
  2. PatternClassIn はタイプ セーフを提供します。しかし、列挙値にアクセスするには、呼び出し関数にさらにコードを記述する必要があります。
  3. PatternClassOut は、両方の長所を提供します。型安全性を提供し、さらに呼び出し関数から列挙値にアクセスするコードは PatternSimple と同じです。