問題タブ [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.
templates - テンプレートの constexpr メソッドで使用される列挙型クラスのビットマスク
マイクロコントローラー プロジェクトに次の C++11 コードがあります。
これは問題なく動作し、可変量の uint32_t をテンプレート引数として渡すことができます。次に、コンパイラはそれらすべてを OR し、各呼び出しを定数値に置き換えます。マイクロコントローラにとっては、レジスタに割り当てる前に OR 演算を実行する必要がないため、これは理想的です。
場合によっては、以下のような列挙型クラスを値として使用したい:
これらの列挙型クラスが複数あるため、上記の mask_or コードで列挙型クラスの値を使用する一般的な方法を探しています。要約すると、私はこれを行うことができるようにしたい:
理想的には、mask_or<...>::value を constexpr にして、コード サイズを小さくし、速度を高速に保ちたいと考えています。
これは可能だと思いますが、うまくいかないようです。誰でも私を助けることができますか?
templates - テンプレート化されたクラスの一部としての条件付き列挙
マイクロコントローラー用の C++ ライブラリに取り組んでおり、テンプレートの種類に基づいて異なる列挙型クラスのコンテンツを指定する方法が必要です。
私はこれまでにこのコードを持っています:
Timer クラスは、静的にのみ使用されることになっています。サポートされていないオプションが特殊機能レジスタ (SFR) に設定されるのを避けるために、テンプレート タイプに基づいてオプション列挙の内容を変更したいと考えています。上記のコードは私の最善の試みですが、コンパイラは decltype の使用を好みません。
上記で定義した型特性を介して、テンプレート型に基づいて異なる列挙型クラスのコンテンツを宣言する方法はありますか?
c++ - 列挙型クラスの std::pair をキーとして unordered_map を使用した不完全型構造体 std::hash の無効な使用
unordered_map<std::pair<enum_class,other_enum_class>,std::uint8_t>
一部のピクセルマップ形式を管理 するために を使用したいと考えています。
ここに最小限のコード:
GCC では、クラスをインスタンス化しようとするとエラーが発生します。
main.cpp:14:24: エラー: 不完全な型 'struct std::hash' の無効な使用
return std::hash()(x.first) ^ std::hash()(x.second); /usr/local/include/c++/5.2.0/bits/basic_string.h:5469:0
からインクルードされたファイルでは、 /usr/local/include/c++/5.2.0/ string:52 から [...]
Clang では、エラーもあります。
エラー: 未定義のテンプレート 'std::hash' の暗黙的なインスタンス化 return std::hash()(x.first) ^ std::hash()(x.second); /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/bits/hashtable_policy. h:1257:16: 注: 関数テンプレートの特殊化 'pair_hash::operator()' のインスタンス化では、ここで [...]
VS2013 ではエラーは発生せず、コードはコンパイルおよび実行されます。
私のコードには何が欠けていますか?
c++ - 列挙型クラスのあいまいな継承
厳密に型指定された列挙型を使用する場合、継承の問題に本当に苦労していますが、継承を介して使用すると、列挙型があいまいなようです。
g ++(GCC)4.7.2を使用しています
なぜこのように動作しないのか、情報が見つかりません。明らかな何かが欠けていますか?
c++ - フラグを定義するための列挙型クラスの使用
最新の C++ で列挙型をフラグとして使用するための適切なパターンは何ですか?
この質問は、技術仕様A Proposal to Add 2D Graphics Rendering and Display to C++ を読んだことに端を発しています。ここで、McLaughlin、Sutter、および Zink はCairo APIに基づく 2D グラフィックス用の C++ API を提案しています。
API 宣言全体を通して、作成者は C++11 を最大限に活用しています。特に、それらの列挙はすべて次のように宣言されます。
1つを除いて:
「text_cluster_flags
型」はクラス メソッドで使用されます。
余分な宣言は、次のtext_cluster_flags
ようにマスクできるようにするためのものだと思います。
enum class
列挙ではできません:
作成者はマスキング演算子を定義する必要がありましたか? それとも、名前空間内の列挙パターンは効果的な方法ですか?
c++ - 内部スコープの列挙、ハッシュ関数、および unordered_set データ メンバー
次の問題があり、解決策が見つかりません。もちろん、解決策がまったく存在しない可能性もありますが、あきらめる前にSOを試してみたいと思います。
まず、エラーなしでコンパイルされるスニペット:
このコードを念頭に置いて、 をunordered_set
データ メンバーとして、S
または少なくとも派生クラスとして持つ必要があることに気付きました。std
考えられる実用的な解決策は、名前空間が閉じられたら、次の行を追加することです。
別の可能な解決策は、おそらく(私は試していませんが)スコープ外の列挙を使用することです。とにかく、私が最初に試みたのは、の定義をstruct S
次のように変更することでした。
(問題を正しく理解していれば)unordered_set
特殊なhash
関数が必要なため、これはエラーで終了します。とにかく、後者はS::E
少なくとも宣言する必要があるため、2 つのコードを交換するだけでは十分ではありません。
エラーログの最初の部分 (非常に長いため):
通常、このような場合は、次の例のように、前方宣言のようなもので解決できます。
残念ながら、構造体に埋め込まれた列挙型で同様のことを行うことができなかったため、この質問を開始しました。それを解決することは可能ですか、したがって、派生クラスを定義することを避けますか、またはこの場合、派生が唯一の実行可能な解決策ですか?D