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

c++ - 範囲指定された列挙型とフォーマット文字列の不一致を警告する GCC は正しいですか?

varargs コンテキストでスコープ付き列挙型を使用する場合、「列挙型クラス値を varargs 関数の引数として使用できますか?」で回答されているように、基になる型として渡されるように定義されています。スコープ付き列挙型は、スコープなし列挙型のように暗黙的に変換されます。

このプログラムを考えてみましょう:

コンパイラ (g++バージョン 6.3.0) は、 a の最初の出力に満足していますが、 aFooを渡すと不平を言いBarます:

g++バージョン 4.8.2 ではこれについて不満はありませんでしたが、g++6.3.0 では問題がありました (それが今私が懸念している理由です)。%forを使用するなどの実質的な不一致がある場合、または基になる型を使用する%sように変更した場合、両方のバージョンが最初の印刷について文句を言います。それが私が有効にする理由です。Foolong-Wformat

警告は標準準拠の問題ではないことを理解しており、これらに対処するためにコードを変更する方法を知っています (たとえば、How can I output the value of an enum class in C++11?への回答で関数を使用します)。また、誤検知が発生する場合、警告は役に立たないと思います。列挙型の基になる型がフォーマット文字列の対応する変換仕様と一致する場合、スコープ付き列挙型をフォーマットされた I/O 関数に渡すと、実際に害が及ぶ可能性はありますか?

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

c++ - std::map の方法?

列挙型クラスと std::string を使用して std::map を試みていますが、エラーが発生しています。-std=c++0x で gcc 4.4.7 を使用しています (これは修正済みです)

.h ファイル:

.cpp ファイル:

状態遷移を許可するメソッドは次のようになります。

コンパイル時に、次のエラーが発生します: エラー: タイプ 'state_t' および 'state_t' のオペランドがバイナリ 'operator<' に対して無効です

に変更enum class state_tするenum state_tと動作します。列挙型クラスを使用してマップで見つける方法はありますか?

前もって感謝します。

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

c++11 - 名前空間とクラスで bitmask_operators.hpp を使用する方法

C++11 をビットフィールドとして使用し、ここでenum class適切なアプローチを見つけたいと考えています。

しかし、列挙型クラス宣言がグローバル名前空間ではなく、カスタム名前空間またはクラス内にある場合、私は立ち往生しました。例えば:

これは常に私にエラーを与えます:

テンプレートの特殊化を、テンプレートが配置されているのと同じ名前空間enable_bitmask_operators(bitmask_operators.hppこの場合はグローバル名前空間) に配置するまで。

しかし、特殊化を enum クラス宣言の近くに置きたいと思っています。

言及された記事では、この問題は Jay Miller によってもコメントされており、彼は解決策を提供しているようです。しかし、私は でこれを解決するための彼のヒントに従わなかったbitmask_operators.hpp.

サンプルコードはこちら

編集/部分的に解決しました:その間、私はそれを機能させました(ダンプのコピーと貼り付けの問題と不可解なエラーメッセージだけです;-)。Jay Millers の constexpr 関数ソリューションを適用して、サンプル コードを更新しました。

ただし、クラス内で列挙型クラスを宣言する場合は、まだ問題があります。クラスに ctor を追加すると、次のように問題が発生します。

次に、エラーが発生しました:

さて、staticキーワードを追加してこれを修正しました:

しかし、ビットマスク演算子を使用しようとすると、次の問題が発生します。

エラーが発生しました:

エラーがここにあることを示す更新された例。

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

c++ - 列挙型クラスの範囲外の値

enum class関数内でを定義すると、使用可能なオプションから値が取得されます。ただし、クラス内で定義すると、オプションの値はありません。では、 の初期値はg.f? true比較すると何が返されますか?((g.f==??)==true)?