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

c++ - オーバーロードされた演算子を呼び出すときの列挙型クラスのユーザー定義の暗黙的な変換が失敗する

次の例を検討してください。

コンパイラのバージョン:

上記の調査結果はclang 3.4gcc 4.8.2です。テスト 2. 実際には で問題なくコンパイルさgcc 4.7.3-std=c++11ます。おそらく初期の GCC C++11 実装のバグ?

アサーション:

  • 1. がコンパイルされると、~オペレーターを呼び出すときにユーザー定義の暗黙的な変換がチェックされます。
  • 4. コンパイルすると、ユーザー定義の暗黙的な変換がenum classオブジェクトに対してチェックされます。

質問:

  • 上記の主張は正しいですか?
  • もしそうなら、なぜ 2. コンパイルに失敗するのですか?
  • 2. はコンパイルに失敗するのに、なぜ 3. はコンパイルされるのでしょうか?
0 投票する
2 に答える
65 参照

c++ - C++:任意の名前空間から同じクラス名のオブジェクトを受け入れる関数を取得する方法は?

MainClass.h:

MainClass.cpp:

それが私ができるようになりたいことです。これは可能ですか?現実的には、 enum クラスが継承のあるクラスのように振る舞えばいいのですが、それができないことはわかっています。これを書き直そうとすればするほど、実際にはケースごとに特定のクラスを作成しなければならなくなるまで、スパイラルが続きます (この例では 2 つだけではありません)。しかし、コードはすべて非常に似ています。

また、代わりにDoStuff(const Parameters p)DoStuff(const int p_val)だけにして、外部で静的キャストを行うことを許可することも知っています...しかし、他の場所ですべての静的キャストを行う必要があり、私はしません'列挙型クラスの適切な型チェックを取得できません。

それが出来ないならそれでいいのですが…出来なかったら残念です。

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

c++ - 列挙型クラスを文字列 (c++) に変換する簡単な方法はありますか?

列挙型を stringに簡単に変換するソリューションはありますが、 を使用することによる安全上の利点がさらに欲しいと思いenum classます。を文字列に変換する簡単な方法はありenum classますか?

(列挙型クラスは配列にインデックスを付けることができないため、指定されたソリューションは機能しません)。

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

c++ - Codelite で C++11 機能を有効にする方法

次のコードは、Xcode 5 および Visual Studio 2013 でコンパイルおよび実行されます。Codelite を試すことに興味がありますが、Codelite は次のプログラムをコンパイルしません (プロジェクトでスコープ付き列挙型を使用しているため、問題が発生します)。私の知る限り、Codelite は Xcode と同じコンパイラを使用しています。

コードは C++11 ごとに有効ですか? Codelite でコンパイルできないのはなぜですか?

Codelite からのビルド出力は次のとおりです。文字化けしている場合は、変数のインスタンス化で「SampleEnum」という単語を指しており、「クラスまたは名前空間が必要です」と言っています。

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

c++ - 列挙型クラスで「reinterpret_cast」を使用する - 有効または未定義の動作?

イデオン

このコードは常に機能することが保証されていますか? それとも未定義の動作ですか?

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

c++ - GoogleTest 1.7.0 `enum class` コンパイル エラー

enum classテストフィクスチャからを参照しようとすると、エラーでコンパイルに失敗します./gtest_mcp23s17.cpp:25:52: error: no type named 'HW_ADDR_6' in 'mcp23s17::HardwareAddress' TC_mcp23s17 _gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6); ~~~~~~~~~~~~~~~~~~~~~~~~~~~^

ただし、テスト自体に参照を残すと (他のすべてのコードはそのままにしておきます)、エラーなしでコンパイルされ、期待どおりにテストが実行されます。これは GoogleTest のバグですか、それともテストに関する限り、このシナリオの違いは何ですか?

テスト (汎用): [コンパイル]

テスト フィクスチャ: [COMPILES]

テスト フィクスチャ (フィクスチャ クラスで宣言された gpio_x を使用): [失敗]

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

c++ - 列挙型クラスの c++ typedef/type 置換

現時点で私が知る限りtypedef、 C++11を実行することはできませんenum classenumカプセル化クラスの外で変数を参照するときに、変数の名前の長さを減らすことができる他の方法があるかどうかを知りたいです。次に例を示します。

最も重要な問題は、 のenum外側を参照する必要がある名前の長さですSegmentActivityType。たとえば、型の比較を行うには、 を記述する必要がありますがSegmentActivity.getState() == SegmentActivityState::ActivityStateType::PreExecution、これは非常に冗長です。やりたくないことは次の2つです。

  1. typedefオンSegmentActivityState
  2. enum classActivityStateType outside of the classSegmentActivityState` 定義を移動します。
0 投票する
1 に答える
155 参照

c++ - 参照によるスコープ列挙型の変更

範囲指定された列挙型が使いにくいことがますますわかっています。参照によって値を設定/初期化するスコープ列挙型のテンプレートを含む一連の関数オーバーロードを作成しようとしています--次のようなものです:

set_valueただし、複数の一時的な値を導入せずにテンプレート化されたバージョンを記述する方法がよくわかりません。

static_castはに加えて 2 番目の一時的な値を導入すると思いますraw_val。これらのいずれかまたは両方がコンパイラによって最適化される可能性があると思いますが、いずれにせよ、set_value呼び出しは一時的な値も生成するため (インライン化されていないと仮定して)、パフォーマンスの点で大きな違いはありませんが、これはまだエレガントではないようです。私がやりたいことは次のようなものです

...しかし、これは有効ではありません (また、参照の代わりにポインターを直接使用する対応するコードもありません)。

を使用することもできましたがreinterpret_cast、これはいくつかの予備テストから機能しているように見えます (機能しない理由は思いつきません) が、C++ では眉をひそめているようです。

これを行う「標準的な」方法はありますか?